【问题标题】:Entity Framework fluent mapping foreign key实体框架流利的映射外键
【发布时间】:2016-12-03 00:54:53
【问题描述】:

我有这些实体类(简化):

public class MyClass 
{
      int Id {get;set;}
      int MyObjectId {get;set;}
      MyObject MyObject {get;set;}
}

public class MyObject 
{
      int Id {get;set;}
      string Name {get;set;}
      ICollection<MyClass> MyClass {get;set;}
}

流畅的映射

HasRequired(x => x.MyObject).WithMany(x => x.MyClass)
    .HasForeignKey(x => x.MyObjectId).WillCascadeOnDelete(false);

我刚开始学习EF,所以我有两个问题

我可以避免使用 MyObjectId 告诉 EF 如何映射事物,还是应该摆脱 MyClass 中的 MyObject 类并改用 MyObjectId,并且每当我需要从表中提取嵌套数据时它由 MyObjectId 吗?在这一点上,两者兼而有之感觉并不合适。

Fluent api 要求我在 MyObject 中引用 MyClass 只是为了指定 WithMany 属性,我实际上不需要从 MyObject 访问 MyClass - 任何指导?

我想我已经习惯了 nHibernate...

【问题讨论】:

  • 你遇到过[ForeignKey]属性吗?
  • 是的,但是我问的是fluent api的事情,这是使用它的缺点吗?
  • 您的问题与查询或创建数据库有关吗?
  • 我认为两者都是,我仍然需要有效的映射来创建数据库,但在查询方面我不希望 MyClass 有 MyObjectId 和 MyObject 因为我可以访问 MyObject.Id 这没有任何意义两者都保留,除非这是 EF 的工作方式。也许我做错了,我的实体不应该包含复杂的对象,只是数据库复制。这将涉及 automaper 从其他实体中提取数据并将结果映射到 viewModel

标签: c# entity-framework-6


【解决方案1】:

在此处查看文档:

Entity Framework fluent mapping foreign key

请参阅“重命名模型中未定义的外键”部分

顺便说一句,很久以前我尝试仅使用导航属性(没有 FK)定义我的模型。我不记得为什么我放弃了,但我遇到了问题并最终将 FK 放在我所有的实体上。这只是我的经验,其他人可能会以不同的方式告诉你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多