【问题标题】:Entity Framework model and foreign key property实体框架模型和外键属性
【发布时间】:2011-02-14 17:14:43
【问题描述】:

我有 2 个要导入 EF 模型的表。
第一个表有一个属性 [section] 作为第二个表的外键。 当我将模型中的这个属性映射到表并尝试编译时,我得到了这个错误:

映射片段开始的问题 在第 158、174 行:非主键 列 [Section] 正在被映射 在两个片段中不同 概念方面的属性 - 数据 不一致是可能的,因为 相应的概念面 属性可以独立 修改。

如果我从它传递的模型中删除此属性,但是当我查询数据时,我没有 section 字段。

我知道我可以通过使用导航字段并从第二个表中读取此属性来获取它,但要使其正常工作,我必须在我的查询中包含另一个表。

var res  = from name in Context.Table1.Include("Table2")...

为什么我只需要包含一个字段的关联?

更新
为了更清楚:

表 1 有字段:
ItemId - 键
部分 - 外键
标题

表 2 有字段:
SectionId - 键
名称

当我设置关联时,必须删除第一个表中的部分属性。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    您的主键是什么,是由一个商店生成的吗?我怀疑您在某处缺少 PK 或身份。

    提示: 遇到映射问题时,另一种方法是在 EDMX 设计器中创建您想要的模型,然后要求它为您创建数据库。将它创建的内容与您在 SQL 中创建的内容进行比较,通常很容易发现错误。

    【讨论】:

      【解决方案2】:

      在 EF 4 中,您可以为此使用 FK associations

      在 EF 1 中,从相关表中获取一个字段的最简单方法是投影:

      var q = from t1 in Context.Table1
              where //...
              select new 
              {
                  T1 = t1,
                  Section = t1.Section.SectionId
              };
      var section = q.First().Section;
      

      如果是key属性,可以通过EntityKey获取值:

      var t1 = GetT1();
      var section = (int)t1.SectionReference.EntityKey.Values[0].Value;
      

      一般来说,我不喜欢最后一种方法。它过于特定于 EF,如果您的查询 MergeOption 设置为 NoTracking,则会失败。

      【讨论】:

      • 这是什么 t1.Section?它是外键属性吗?如果是,我没有。
      • 我猜您的字段名为Section,因为这是错误消息中的内容。我可能猜错了。您没有显示任何架构,因此很难说。替换实际的键属性。我将调整查询以使其更清晰。
      • 是的,它的部分,但我没有它因为我需要在导入表格并创建关联时删除它,所以当我按下 时。 ,智能没有这个属性
      • 是否可以为第一个表创建部分类,在那里创建这个 Section 属性并在执行查询时填充它?
      • 你不能在 LINQ 查询中使用非实体属性(即,你在部分类中添加的代码),因为 EF 不知道如何将它们转换为 SQL。跨度>
      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多