我有两个FluentAPI类。我使用EF Code First方法。一个是ClientAdmin,另一个是学校。我想让ClientAdmin的ID成为学校表的主键
我的ClientAdmin FluentAPI类如下
public ClientAdminMap()
{
this.ToTable("ClientAdmin");
this.HasKey(v => v.Id);
this.Property(v => v.Name).IsRequired().HasMaxLength(400);
this.Property(v => v.Email).HasMaxLength(400);
this.Property(v => v.MetaKeywords).HasMaxLength(400);
this.Property(v => v.MetaTitle).HasMaxLength(400);
this.Property(v => v.PageSizeOptions).HasMaxLength(200);
}
另一个类如下
public SchoolMapper()
{
this.ToTable("School");
this.HasKey(bp => bp.Id);
this.Property(bp => bp.Title).IsRequired();
this.HasRequired(bp => bp.Language)
.WithMany()
.HasForeignKey(bp => bp.LanguageId).WillCascadeOnDelete(true);
}
我该如何实现?请帮忙。
答案 0 :(得分:0)
根据您的问题,您需要一个one-to-one
关系,而ClientAdmin
是这种关系的主体。
在首先使用代码并想要以这种方式创建one-to-one
时,您唯一要做的就是向EF指示哪个实体是主要,哪个实体是< strong>依赖。
此外,您还必须决定是否要将导航属性从主体公开给依赖项,和/或以其他方式公开。
假设您想将ClientAdmin
标记为主体,因此School
将成为从属,并且会有一个从ClientAdmin
到School
的导航属性,然后反之亦然。在这种情况下,作为您的目标,主体实体的主键也将成为从属实体的主键。
为此,您必须在 POCO 上声明这些属性,并配置实体类型配置类以创建关系。
可以完成以下设置:
将导航属性添加到主体实体。
public class ClientAdmin
{
...
public School School { get; set; }
}
将导航属性添加到从属实体。
public class School
{
...
public ClientAdmin ClientAdmin { get; set; }
}
在您的一个实体映射器上设置实体类型配置。下面设置了附属实体-学校:
public class SchoolMapper : EntityTypeConfiguration<School>
{
public SchoolMapper()
{
//your other mapping config.
//add the one-to-one mapping.
HasRequired(x => x.ClientAdmin)
.WithRequiredDependent(x => x.School)
.WillCascadeOnDelete(true);
}
}
这应该为您提供ClientAdmin
和School
实体之间的理想关系。让我知道它如何为您工作。
希望这会有所帮助!