首页 文章

实体框架外键映射

提问于
浏览
1

我正在试图确定EF6告诉我什么,这对我来说没有多大意义,所以我希望有人在这里澄清一下 .

我正在设置我的FluentApi(在DB中使用的复合键,这是来自数据库的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 });

所有构建都很好,但当我去选择任何东西时,我得到这个:

“表Object2(Property2,Property1)中的外键约束'Object1_Object2'到表Object1(Property1,Property2)::映射不足:外键必须映射到概念方参与外键关联的某些AssociationSet或EntitySets . “

想法?当我在FluentApi中定义了正确的顺序时,我不明白为什么FK约束以错误的顺序显示Object2的FK .

2 回答

  • 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; }
    }
    
  • 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而没有问题:)感谢所有人的帮助!

相关问题