Entity framework EF使用Fluent API编码第一个1到1映射

Entity framework EF使用Fluent API编码第一个1到1映射,entity-framework,ef-code-first,ef-fluent-api,Entity Framework,Ef Code First,Ef Fluent Api,如果数据库体系结构是这样的,我将如何使用fluent API创建映射? 我得到了这个错误 无法确定类型“PermanentAddresses”和“Addresses”之间关联的主端。必须使用relationship fluent API或data Annotation显式配置此关联的主要端。您的多元化使您看起来像是在处理集合,但除此之外,您可以尝试以下操作: protected override void OnModelCreating(DbModelBuilder modelBuilder)

如果数据库体系结构是这样的,我将如何使用fluent API创建映射?

我得到了这个错误


无法确定类型“PermanentAddresses”和“Addresses”之间关联的主端。必须使用relationship fluent API或data Annotation显式配置此关联的主要端。

您的多元化使您看起来像是在处理集合,但除此之外,您可以尝试以下操作:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<PermanentAddresses>()
        .HasRequired(pa => pa.Users)
        .WithRequiredDependent(u => u.PermanentAddresses);

    modelBuilder.Entity<TemporaryAddresses>()
        .HasRequired(pa => pa.Users)
        .WithRequiredDependent(u => u.TemporaryAddresses);

    modelBuilder.Entity<PermanentAddresses>()
        .HasRequired(pa => pa.Addresses)
        .WithRequiredDependent(u => u.PermanentAddresses);

    modelBuilder.Entity<TemporaryAddresses>()
        .HasRequired(pa => pa.Addresses)
        .WithRequiredDependent(u => u.TemporaryAddresses);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasRequired(pa=>pa.Users)
.需要依赖(u=>u.PermanentAddress);
modelBuilder.Entity()
.HasRequired(pa=>pa.Users)
.具有所需的从属地址(u=>u.临时地址);
modelBuilder.Entity()
.HasRequired(pa=>pa.Addresses)
.需要依赖(u=>u.PermanentAddress);
modelBuilder.Entity()
.HasRequired(pa=>pa.Addresses)
.具有所需的从属地址(u=>u.临时地址);
}

谢谢您的回复

我添加了这个配置

modelBuilder.Entity<PermanentAddresses>().ToTable("PermanentAddresses", "user");
modelBuilder.Entity<PermanentAddresses>().HasKey(x => new { x.Id, x.AddressId });

modelBuilder.Entity<TemporaryAddresses>().ToTable("TemporaryAddresses", "user");
modelBuilder.Entity<TemporaryAddresses>().HasKey(x => new { x.Id, x.AddressId });
modelBuilder.Entity().ToTable(“永久地址”、“用户”);
modelBuilder.Entity().HasKey(x=>new{x.Id,x.AddressId});
modelBuilder.Entity().ToTable(“临时地址”、“用户”);
modelBuilder.Entity().HasKey(x=>new{x.Id,x.AddressId});
请检查一下

我想把“地址Id”指向“地址Id” 以及“用户Id”到“Id”

然而,如果我尝试添加 .Map(p=>p.MapKey(“Id”); .Map(p=>p.MapKey(“AddressId”); 像这样

modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("Id"));
modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("AddressId"));
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("Id"));
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("AddressId"));
modelBuilder.Entity().HasRequired(pa=>pa.Users)。WithRequiredDependent(u=>u.permanentAddresss)。Map(p=>p.MapKey(“Id”);
modelBuilder.Entity().HasRequired(pa=>pa.Addresses).WithRequiredDependent(u=>u.permanentAddresss).Map(p=>p.MapKey(“AddressId”);
modelBuilder.Entity().HasRequired(pa=>pa.Users)。WithRequiredDependent(u=>u.TemporaryAddresses)。Map(p=>p.MapKey(“Id”);
modelBuilder.Entity().HasRequired(pa=>pa.Addresses)。WithRequiredDependent(u=>u.TemporaryAddresses)。Map(p=>p.MapKey(“AddressId”);
我犯了一个错误

在模型生成过程中检测到一个或多个验证错误:

AddressId:Name:类型中的每个属性名称都必须是唯一的。属性名称“AddressId”已定义。 Id:Name:类型中的每个属性名称都必须是唯一的。属性名称“Id”已定义。 AddressId:Name:类型中的每个属性名称都必须是唯一的。属性名称“AddressId”已定义。
Id:Name:类型中的每个属性名称都必须是唯一的。属性名“Id”已定义。

我认为您的问题可能与外键名不对齐有关。您可以在这里尝试modelBuilder.Entity().HasRequired(pa=>pa.Users)的技术;看见
modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("Id"));
modelBuilder.Entity<PermanentAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.PermanentAddresses).Map(p => p.MapKey("AddressId"));
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Users).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("Id"));
modelBuilder.Entity<TemporaryAddresses>().HasRequired(pa => pa.Addresses).WithRequiredDependent(u => u.TemporaryAddresses).Map(p => p.MapKey("AddressId"));