1

这里有没有人使用过 LINQ to SQL 来支持域模型的持久性?

我不打算使用 LINQ2SQL 实体设计器,只是使用普通的手工编码 XML 映射,而且我目前遇到了障碍。

我正在尝试在我正在做的 DDD 示例中使用它,因为我的听众只知道 LINQ2SQL。

4

1 回答 1

0

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 执行此操作。

有没有更好的方法来做到这一点,而无需显式编写属性及其到数据模型的映射?

于 2010-02-02T04:33:12.547 回答