使用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");
}
}
这很好
但我尝试了许多方法将Class1
的Class2
属性绑定到Class1Tablename
的IdClass2ColumnName
字段作为链接到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"));
解决了代码迁移中的一个问题,我忘记更新代码迁移类,所以EF使用了旧列名。
正确的映射语法是
this.HasRequired(t => t.class2)
.WithRequiredDependent()
.Map(m => m.MapKey("IdClass2ColumnName "));