使用fluent api实现实体框架中的一对多映射

本文关键字:一对多 映射 框架 实体 fluent api 实现 使用 | 更新日期: 2023-09-27 17:57:49

我发现了很多关于这方面的例子,但没有人适合我…

我有主课:

public class Class1
{
    public int id { get; set; }
    public string desc { get; set; } 
    public virtual Class2 class2 {get; set;}
}

第二类:

public class Class2
{
    public int id { get; set; }
    public string desc { get; set; } 
}

我正在以这种方式映射Class1

public class Class1Map : EntityTypeConfiguration<Class1>
{
    public Class1Map()
    {
        // Primary Key
        this.HasKey(t => t.Id);
        // Table & Column Mappings
        this.ToTable("Class1TableName");
        this.Property(t => t.id).HasColumnName("IdColumnName");
        this.Property(t => t.desc).HasColumnName("DescColumName");
    }
}

这很好

但我尝试了许多方法将Class1Class2属性绑定到Class1TablenameIdClass2ColumnName字段作为链接到Class2表的IdColumnName的外键,但都没有成功。

正如你所看到的,我不想把IdClass2属性也放在Class1

对于测试,我尝试了但没有成功:

this.HasRequired(t => t.class2)
    .WithRequiredPrincipal()
    .Map(m => m.MapKey("IdClass2ColumnName "));

this.HasRequired(t => t.class2)
    .WithMany()
    .Map(m => m.MapKey("IdClass2ColumnName"));

使用fluent api实现实体框架中的一对多映射

解决了代码迁移中的一个问题,我忘记更新代码迁移类,所以EF使用了旧列名。

正确的映射语法是

this.HasRequired(t => t.class2)
    .WithRequiredDependent()
    .Map(m => m.MapKey("IdClass2ColumnName "));