<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <Title>Basic Domain Service CRUD Code Generator</Title>
      <Shortcut>dsm</Shortcut>
      <Description>
        To generate Basic Domain Service CRUD Codes
      </Description>
      <Author>Gilbert Lee</Author>
    </Header>
    <Snippet>
      <Declarations>
        <Literal Editable="true">
          <ID>UppercaseTableName</ID>
          <ToolTip>Table Name with Uppercase</ToolTip>
          <Default>TableNameToUppercase</Default>
          <Function>
          </Function>
        </Literal>
        <Literal Editable="true">
          <ID>LowercaseTableName</ID>
          <ToolTip>Table Name with Lowercase</ToolTip>
          <Default>tableNameToLowercase</Default>
          <Function>
          </Function>
        </Literal>
      </Declarations>
      <Code Language="csharp">
<![CDATA[
        public IQueryable<$UppercaseTableName$> Get$UppercaseTableName$s()
        {
            return this.ObjectContext.$UppercaseTableName$;
        }

        public void Insert$UppercaseTableName$($UppercaseTableName$ $LowercaseTableName$)
        {
            if (($LowercaseTableName$.EntityState != EntityState.Added))
            {
                if (($LowercaseTableName$.EntityState != EntityState.Detached))
                {
                    this.ObjectContext.ObjectStateManager.ChangeObjectState($LowercaseTableName$, EntityState.Added);
                }
                else
                {
                    this.ObjectContext.AddTo$UppercaseTableName$($LowercaseTableName$);
                }
            }
        }

        public void Update$UppercaseTableName$($UppercaseTableName$ current$UppercaseTableName$)
        {
            if ((current$UppercaseTableName$.EntityState == EntityState.Detached))
            {
                this.ObjectContext.AttachAsModified(current$UppercaseTableName$, this.ChangeSet.GetOriginal(current$UppercaseTableName$));
            }
        }

        public void Delete$UppercaseTableName$($UppercaseTableName$ $LowercaseTableName$)
        {
            if (($LowercaseTableName$.EntityState == EntityState.Detached))
            {
                this.ObjectContext.Attach($LowercaseTableName$);
            }
            this.ObjectContext.DeleteObject($LowercaseTableName$);
        }
        $end$
]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>


