2

我目前有一个基于我在 sql server 2008 中的数据结构的复杂实体关系设置。

我正在尝试做的事情我认为会非常简单,但我正在拔头发并且花了几天时间试图弄清楚它。

我有一个地址和地址类型表,它们在 addressTypeID 上连接。有 2 种地址类型,“计费”和“运输”。我希望能够为计费和运输创建一个自定义实体。我原以为我可以从 Address 实体继承并添加一个条件来检索正确的类型,但它并不那么简单。

我不想从这些现有实体中删除导航属性或字段,以便我们可以在需要时深入研究那些预先存在的实体。

目标是创建自定义实体,其中包含基于某些标准的其他实体的字段......几乎就像视图对 SQL Server 所做的一样。从字面上看,我在互联网上找到的所有示例都不清楚如何做到这一点。

我现在拥有的是每种混凝土类型的表格(我相信)。每次我尝试这样做时都会对我大喊大叫,告诉我事情没有映射等等......然后我映射它们然后得到一条新的错误消息。那里有什么好的教程吗?我宁愿不深入研究 ssdl 等,因为当我重建模型时它们会被覆盖。

延迟加载被禁用......这就是我想要的。

为什么我不能只创建一个新实体、复制并粘贴字段并设置表映射?我创建了一个名为 BillingAddress 的新实体,从 Address 中复制了字段并设置了表映射....然后我得到了错误:

错误 297 错误 3033:从第 4525 行开始映射片段时出现问题:EntitySets 'BillingAddresses' 和 'Addresses' 都映射到表 'Address'。它们的主键可能会发生冲突。

我也尝试从地址表继承....错误:必须为设置地址中的所有类型指定映射

4

2 回答 2

3

如果我正确理解了您的架构,那么您有一个Address带有鉴别器列的表addressTypeID,它定义了特定记录所代表的地址类型。单个Address表包含两种类型的记录...帐单送货地址。如果是这种情况,那么您实际上有一个 Table-Per-Hierarchy 或 TPH 结构,因为每个类层次结构都有一个表。

您提到您认为您有一个 Table-Per-Concrete-type 或 TPC 结构。如果是这种情况,那么您的数据库将需要ShippingAddress和表,因为在 TPC 中,每个具体类型BillingAddress都有一个表。

您需要具有类似于以下的代码结构:

public abstract class Address
{
    // Common address properties
}

public class ShippingAddress: Address
{
    // Additional shipping-address specific properties
}

public class BillingAddress: Address
{
    // Additional billing-address specific properties
}

然后,您需要将您的类层次结构ShippingAddressBillingAddress类型映射为单个表上的 TPH 映射,并在列Address上进行区分。addressTypeIDAddressType 列甚至不会在映射中发挥作用,除非您希望通过某个 AddressType 名称或代理键进行映射。在这种情况下,呈现适当地址和地址类型表的合并视图的视图将是您的基本 TPH 模式源,其中鉴别器列是地址类型表中包含的代理键列。

于 2010-06-29T03:51:00.123 回答
0

实际上,这听起来更像是逐层表,或者可能是概念模型中的水平分区。有关受支持架构的(相当少的)文档,请参阅此 MSDN 页面。

如果该链接没有足够的帮助,请发布您的确切表定义和您想要的实体设计(类和属性),我们会解决的。

于 2010-06-28T22:35:59.467 回答