使用 Fluent API 的 EF Code First 1 对 1 映射
EF Code First 1 to 1 mapping using Fluent API
How am I going to create the mapping using fluent API if the database architecture is something like this?
public class Users
{
public Users()
{
PermanentAddresses = new PermanentAddresses();
TemporaryAddresses = new TemporaryAddresses();
}
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public virtual PermanentAddresses PermanentAddresses { get; set; }
public virtual TemporaryAddresses TemporaryAddresses { get; set; }
}
public class PermanentAddresses
{
// Primary Key and Foreign Key from Users class
public string Id { get; set; }
// Primary Key and Foreign Key from Addresses class
public int AddressId { get; set; }
public virtual Users Users { get; set; }
public virtual Addresses Addresses { get; set; }
}
public class TemporaryAddresses
{
// Primary Key and Foreign Key from Users class
public string Id { get; set; }
// Primary Key and Foreign Key from Addresses class
public int AddressId { get; set; }
public virtual Users Users { get; set; }
public virtual Addresses Addresses { get; set; }
}
public class Addresses
{
public Addresses()
{
PermanentAddresses = new PermanentAddresses();
TemporaryAddresses = new TemporaryAddresses();
Company = new Company();
}
public int Id { get; set; }
public string CompleteAddress { get; set; }
public virtual PermanentAddresses PermanentAddresses { get; set; }
public virtual TemporaryAddresses TemporaryAddresses { get; set; }
public virtual Company Company { get; set; }
}
我遇到了这个错误。
无法确定类型 'PermanentAddresses' 和 'Addresses' 之间关联的主体端。此关联的主体端必须使用流畅的关系 API 或数据注释进行显式配置。
你的多元化让你看起来像是在处理集合,但除此之外你可以尝试类似的东西:
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);
}
感谢您的回复。
我添加了这个配置
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 });
请检查这个
generated Tables and Columns
我想将 "Addresses_Id" 指向 "AddressId"
"Users_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"));
我收到一个错误。
在模型生成过程中检测到一个或多个验证错误:
AddressId: 名称:类型中的每个 属性 名称都必须是唯一的。 属性 名称 'AddressId' 已经定义。
Id: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'Id' 已经定义。
AddressId: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'AddressId' 已经定义。
Id: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'Id' 已经定义。
How am I going to create the mapping using fluent API if the database architecture is something like this?
public class Users
{
public Users()
{
PermanentAddresses = new PermanentAddresses();
TemporaryAddresses = new TemporaryAddresses();
}
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public virtual PermanentAddresses PermanentAddresses { get; set; }
public virtual TemporaryAddresses TemporaryAddresses { get; set; }
}
public class PermanentAddresses
{
// Primary Key and Foreign Key from Users class
public string Id { get; set; }
// Primary Key and Foreign Key from Addresses class
public int AddressId { get; set; }
public virtual Users Users { get; set; }
public virtual Addresses Addresses { get; set; }
}
public class TemporaryAddresses
{
// Primary Key and Foreign Key from Users class
public string Id { get; set; }
// Primary Key and Foreign Key from Addresses class
public int AddressId { get; set; }
public virtual Users Users { get; set; }
public virtual Addresses Addresses { get; set; }
}
public class Addresses
{
public Addresses()
{
PermanentAddresses = new PermanentAddresses();
TemporaryAddresses = new TemporaryAddresses();
Company = new Company();
}
public int Id { get; set; }
public string CompleteAddress { get; set; }
public virtual PermanentAddresses PermanentAddresses { get; set; }
public virtual TemporaryAddresses TemporaryAddresses { get; set; }
public virtual Company Company { get; set; }
}
我遇到了这个错误。
无法确定类型 'PermanentAddresses' 和 'Addresses' 之间关联的主体端。此关联的主体端必须使用流畅的关系 API 或数据注释进行显式配置。
你的多元化让你看起来像是在处理集合,但除此之外你可以尝试类似的东西:
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);
}
感谢您的回复。
我添加了这个配置
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 });
请检查这个 generated Tables and Columns
我想将 "Addresses_Id" 指向 "AddressId" "Users_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"));
我收到一个错误。
在模型生成过程中检测到一个或多个验证错误:
AddressId: 名称:类型中的每个 属性 名称都必须是唯一的。 属性 名称 'AddressId' 已经定义。 Id: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'Id' 已经定义。 AddressId: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'AddressId' 已经定义。 Id: 名称:类型中的每个 属性 名称必须是唯一的。 属性 名称 'Id' 已经定义。