这里有没有人使用过 LINQ to SQL 来支持域模型的持久性?
我不打算使用 LINQ2SQL 实体设计器,只是使用普通的手工编码 XML 映射,而且我目前遇到了障碍。
我正在尝试在我正在做的 DDD 示例中使用它,因为我的听众只知道 LINQ2SQL。
这里有没有人使用过 LINQ to SQL 来支持域模型的持久性?
我不打算使用 LINQ2SQL 实体设计器,只是使用普通的手工编码 XML 映射,而且我目前遇到了障碍。
我正在尝试在我正在做的 DDD 示例中使用它,因为我的听众只知道 LINQ2SQL。
POCO 可以被映射,因此它可以与 DataContext 一起使用。
但是,我发现映射有点泄漏。数据模型信息现在泄漏到域实体。考虑这个例子:
<Table Name="dbo.products">
<Type Name="Ptc.Store.Core.Product">
<Column Name="id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" CanBeNull="false" DbType="INT NOT NULL IDENTITY" />
<Column Name="name" Member="Name" CanBeNull="false" DbType="VARCHAR(50) NOT NULL" />
</Type>
</Table>
<Table Name="[dbo].branches">
<Type Name="Ptc.Store.Core.Branch">
<Column Name="id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" DbType="INT NOT NULL IDENTITY" />
<Column Name="name" Member="Name" CanBeNull="false" DbType="VARCHAR(50) NOT NULL" />
</Type>
</Table>
<Table Name="[dbo].sales">
<Type Name="Ptc.Store.Core.Sale">
<Column Name="id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" CanBeNull="false" DbType="INT NOT NULL IDENTITY" />
<Column Name="transaction_date" Member="TransactionDate" CanBeNull="false" DbType="DATETIME" />
<Column Name="amount" Member="Amount" CanBeNull="false" DbType="MONEY" />
<Association Name="sales_item" Member="Item" IsForeignKey="true" ThisKey="ProductId" OtherKey="Id" />
<Association Name="sales_location" Member="Location" IsForeignKey="true" ThisKey="BranchId" OtherKey="Id" />
<!-- Why do I have to map foreign keys? Looks leaky to me.-->
<Column Name="product_id" Member="ProductId" CanBeNull="false" DbType="INT" />
<Column Name="branch_id" Member="BranchId" CanBeNull="false" DbType="INT" />
</Type>
</Table>
更糟糕的是,我必须在我的实体上显式声明属性以匹配数据模型的外键。我不必对 NHibernate 执行此操作。
有没有更好的方法来做到这一点,而无需显式编写属性及其到数据模型的映射?