随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 partial class User : System.Data.DLinq.IChangeNotifier
{
//….
}
里面是对应数据表字段的变量和property们,你可以在另外的文件里定义该类的操作,譬如
public partial class User
{
public void Test()
{
Console.WriteLine(“User:Test():” + Name);
}
//…..
}
这样,即使你用SQLMetal重新生成Entity Class文件,也不会影响你定义操作的文件。将来IDE大概会支持,或者顶多在Build过程中多加一步
打赏作者