我试图确定EF6告诉我什么,而且对我来说没有多大意义,所以我希望有人在这里澄清一下。
我正在设置我的FluentApi(在数据库中使用的复合键,这是数据库中的Code First):
modelBuilder.Entity<Object1>()
.HasKey(e => new { e.Property1, e.Property2 }
.HasMany(e => e.Object2s)
.WithRequired(e => e.Object1)
.HasForeignKey(e => new { e.Property1, e.Property2 });
modelBuilder.Entity<Object2>()
.HasKey(e => new { e.Property2, e.Property3, e.Property1 })
.HasRequired(e => e.Object1)
.WithMany(e => e.Object2s)
.HasForeignKey(e => new { e.Property1, e.Property2 });
所有构建都很好,但是当我去选择任何东西时,我得到了这个:
&#34;外键约束&#39; Object1_Object2&#39;来自表Object2 (Property2,Property1)到表Object1(Property1,Property2):: 映射不足:必须将外键映射到某些键 参与外键的AssociationSet或EntitySets 概念方面的协会。&#34;
想法?当我在FluentApi中定义了正确的顺序时,我不明白为什么FK约束以错误的顺序显示Object2的FK。
答案 0 :(得分:0)
尝试属性:
//using System.ComponentModel.DataAnnotations.Schema
public class Object1
{
public int Property1{ get; set; }
public string Property2 { get; set; }
//Foreign key for Object2
public int FK_Object2_Property { get; set; }
[ForeignKey("FK_Object2_Property")]
public Object2 Object2 { get; set; }
}
public class Object2
{
public int Property1{ get; set; }
public string Property2 { get; set; }
public ICollection<Object1> Objects { get; set; }
}
答案 1 :(得分:0)
这最终是我必须做的 - 设置外键属性,并指定列顺序。 DB中的Code First具有Order = 2和Order = 0,因此我将其更改为:
public partial class Object2
{
[Key]
[Column("Property2", Order=2)]
[ForeignKey("Object1")]
public short Property2 { get; set; }
[Key]
[Column("Property3", Order=1)]
public short Property3 { get; set; }
[Key]
[Column("Property1", Order=0)]
[ForeignKey("Object1")]
public int Property1 { get; set; }
}
我从Object1和Object2中删除了与此外键排列相关的FluentApi,并且一切都很好。一旦我确定如何在FluentApi中设置列顺序,我就会在FluentApi中重新执行此操作。
然后我必须将此添加到我的T4文件中以获取此对象...最终目标是能够在任何时候将DB重新生成到Code First而没有问题:)感谢所有人的帮助!