.net - Entity Framework 4.0 创建从其他实体派生的新实体

标签 .net entity-framework entities

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

我认为我想做的事情非常简单,但我却费了好大劲,花了几天时间试图弄清楚。

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

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

目标是创建自定义实体,其中包含基于特定标准的其他实体的字段...几乎就像 SQL Server 的 View 所做的那样。从字面上看,我在互联网上找到的所有示例都不清楚如何执行此操作。

我现在拥有的是每种具体类型的表(我相信)。每次我尝试这样做时,都会对我大喊大叫,告诉我事情没有映射等等......然后我映射它们然后收到新的错误消息。有没有好的、清晰的教程?我不想深入研究 ssdl 等,因为当我重建模型时这些会被覆盖。

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

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

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

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

最佳答案

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

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

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

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 类型的类层次结构映射为单个 Address 表上的 TPH 映射,并区分addressTypeID 列。 AddressType 列甚至不会在映射中发挥作用,除非您希望通过某些 AddressType 名称或代理键进行映射。在这种情况下,显示相应 Address 和 AddressType 表的合并 View 的 View 将成为您的基本 TPH 架构源,其中鉴别器列是 AddressType 表中包含的代理键列。

关于.net - Entity Framework 4.0 创建从其他实体派生的新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3136497/

相关文章:

c# - 将控制台输出镜像到文件

未提供的 C# 数据库插入 : The parameterized query expects the parameter,

C# webapi 异步上下文问题

c# - EF lambda : The Include path expression must refer to a navigation property

c# - 如何删除对象而不在 EF 中检索它

objective-c - 为什么对libxml2 SAX解析的属性值中的实体进行编码?

java - POJO 作为 mongodb 中的文档

.net - 禁用 Windows 窗体上的所有事件

.net - 如何使TeamCity使用MSTest运行测试?

java - 从 Restful 服务中检索实体列表(在客户端应用程序内)