我有两个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);
}
我怎样才能做到这一点?请帮忙。
根据您的问题,您需要一个one-to-one
关系,ClientAdmin
是该关系中的主体。
当您首先使用代码并且希望以这种方式创建one-to-one
时,您唯一需要做的就是向EF指示哪个实体是主体,哪个实体将是dependent。
此外,您还必须决定是否要将主体的导航属性公开给依赖项和/或以其他方式公开。
假设您想将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
实体之间所需的关系。让我知道它是如何为你工作的。
希望这能有所帮助!