EF Code First使用FluentAPI的一对一关系



我有两个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将是从属的,并且将存在从ClientAdminSchool的导航属性,反之亦然。在这种情况下,正如您的目标一样,主体实体的主键也将是从属实体的主键。

要做到这一点,您必须在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);
}
}

这将为您提供ClientAdminSchool实体之间所需的关系。让我知道它是如何为你工作的。

希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新