代码生成器 SQLMetal

2005-09-18 by 开心就好

随LINQ一起来的工具里,有个Entity Class Generator Tool,叫SQLMetal,能连接到数据库直接产生跟数据表对应的Entity Class,就象上个帖子里的例子一样

SqlMetal /server:(local) /database:DLINQ /delayfetch /pluralize /namespace:LINQ.Examples.QuickStart /code:User.cs

也可以先生成一个Schema XML文件,譬如

SqlMetal /server:(local) /database:DLINQ /pluralize /xml:User.xml

对应上个贴里的Users表的XML是这样的

\<Database xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="DLINQ">
  \<Schema Name="Dbo">
    \<Table Name="users" Property="Users" Class="User">
      \<Column Name="LogonID" Type="System.String" DbType="NVarChar(20) NOT NULL" Nullable="false" IsIdentity="true" />
      \<Column Name="Name" Type="System.String" DbType="NVarChar(40)" />
      \<Column Name="Password" Type="System.String" DbType="NVarChar(20)" />
      \<Column Name="EmailAddress" Type="System.String" DbType="NVarChar(40)" />
      \<Column Name="LastLogon" Type="System.DateTime" DbType="DateTime" Nullable="true" />
      \<PrimaryKey Name="PK__users__09DE7BCC">
        \<Column Name="LogonID" />
      \</PrimaryKey>
      \<Index Name="PK__users__09DE7BCC" Style="CLUSTERED" IsUnique="true">
        \<Column Name="LogonID" />
      \</Index>
    \</Table>
  \</Schema>
\</Database>

你可以修改其中内容 (但居然无法修改生成的property name??),然后再运行SQLMetal来产生编码

SqlMetal /namespace:LINQ.Examples.QuickStart /code:User.cs User.xml

注意,生成的Entity Class是个partial class

public <font color="#ff0000">partial</font> class User : System.Data.DLinq.IChangeNotifier
{
  //....
}

里面是对应数据表字段的变量和property们,你可以在另外的文件里定义该类的操作,譬如

public partial class User
{
  public void Test()
  {
     Console.WriteLine("User:Test():" + Name);
  }

//.....
}

这样,即使你用SQLMetal重新生成Entity Class文件,也不会影响你定义操作的文件。将来IDE大概会支持,或者顶多在Build过程中多加一步


Comments