如何将一个自定义实体映射到实体框架中的某些数据库表?

Posted

技术标签:

【中文标题】如何将一个自定义实体映射到实体框架中的某些数据库表?【英文标题】:How can I map one custom Entity to some database tables in Entity Framework? 【发布时间】:2018-10-30 22:21:04 【问题描述】:

我的项目中有一个数据库优先模型。从数据库中导入DocumentDocumentItemProduct 3 个表。 我想创建一个名为Order 的新实体,它连接这三个数据库表的一些字段。如您在第一张图片中看到的那样,我创建了该实体,并如您在第二张图片中看到的那样填充了它的表映射。 在构建项目后,我收到以下错误:

Severity    Code    Description Project File    Line    Suppression State
Error       Error 3025: Problem in mapping fragments starting at line 193:Must specify mapping for all key properties (Product.Id) of table Product.    EFTest  C:\Users\Me\documents\visual studio 2015\Projects\EFTest\EFTest\Data\EfTest.edmx    194 
Error       Error 3025: Problem in mapping fragments starting at line 186:Must specify mapping for all key properties (Document.Id) of table Document.  EFTest  C:\Users\Me\documents\visual studio 2015\Projects\EFTest\EFTest\Data\EfTest.edmx    187 
Error       Error 3024: Problem in mapping fragments starting at line 193:Must specify mapping for all key properties (Orders.Id) of the EntitySet Orders.  EFTest  C:\Users\Me\documents\visual studio 2015\Projects\EFTest\EFTest\Data\EfTest.edmx    194 
Error       Error 3024: Problem in mapping fragments starting at line 186:Must specify mapping for all key properties (Orders.Id) of the EntitySet Orders.  EFTest  C:\Users\Me\documents\visual studio 2015\Projects\EFTest\EFTest\Data\EfTest.edmx    187 

我找不到问题的根源。我该如何解决这些错误?

【问题讨论】:

您是否检查了数据库结构是否正确映射到您的设计方案?例如:product.Id 是否在您的数据库中定义为主键? @HanyHabib 是的,没关系。 最简单的方法不是在数据库中创建 Order 作为视图,然后将该视图用作您的新实体吗? 【参考方案1】:

错误告诉您的项目中缺少外键!

考虑到您知道您不能简单地将数据库中的表添加到模型中,然后在模型中创建新关联。默认情况下,它使用必须映射到其数据库对应项的独立关联(例如,关系也必须存在于数据库中)。您必须将您的关系建模为 FK 关联,但它只允许 一对一一对多 关联。 换句话说,当您添加一个在 EF4 中选中“在模型中包含外键列”的新表并且该表不包含任何外键关系时,您尝试添加一个关联,它将触发此错误。解决办法是Define Constraints in an EF4 model that don’t exist in the database.

当您可以从 EF 设计器中删除表并手动删除与该表相关的所有内容(在 XML 文件中),然后再次添加表并放置正确的映射时,有时我们会遇到不需要的冲突,这可能会导致此类问题再次。

【讨论】:

以上是关于如何将一个自定义实体映射到实体框架中的某些数据库表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有主键实体框架的情况下映射表

如何使用实体框架将字符串映射到 Uri 类型?

实体框架代码首先自定义字段,我不想映射到数据库

从实体框架映射到自定义域模型类?

Java自定义注解注解实现实体类与数据库表字段的映射

Java自定义注解注解实现实体类与数据库表字段的映射