C# 实体框架与ASP.NET样板文件的1对1关系
当我们使用时,如何设置与下面提到的模型的1:1关系?提前谢谢 注1:我已经了解了EF 1对1关系。但不幸的是,我不知道如何使用ASP.NET样板文件进行设置,因为PK是由ABP自动设置的。在我的场景中,两个表都有C# 实体框架与ASP.NET样板文件的1对1关系,c#,asp.net-mvc-5,ef-code-first,entity-framework-6,asp.net-boilerplate,C#,Asp.net Mvc 5,Ef Code First,Entity Framework 6,Asp.net Boilerplate,当我们使用时,如何设置与下面提到的模型的1:1关系?提前谢谢 注1:我已经了解了EF 1对1关系。但不幸的是,我不知道如何使用ASP.NET样板文件进行设置,因为PK是由ABP自动设置的。在我的场景中,两个表都有intPK 注2:此处,属性和地址模型具有1:1的关系 属性型号: [Table("IpProperties")] public class Property : FullAuditedEntity { public virtual bool Vacant { get; set;
int
PK
注2:此处,属性
和地址
模型具有1:1的关系
属性
型号:
[Table("IpProperties")]
public class Property : FullAuditedEntity
{
public virtual bool Vacant { get; set; }
public virtual Address Address { get; set; }
}
[Table("IpAddresses")]
public class Address : FullAuditedEntity
{
[Required]
[MaxLength(MaxLength)]
public virtual string StreetNumber { get; set; }
public virtual Property Property { get; set; }
}
地址
型号:
[Table("IpProperties")]
public class Property : FullAuditedEntity
{
public virtual bool Vacant { get; set; }
public virtual Address Address { get; set; }
}
[Table("IpAddresses")]
public class Address : FullAuditedEntity
{
[Required]
[MaxLength(MaxLength)]
public virtual string StreetNumber { get; set; }
public virtual Property Property { get; set; }
}
关系映射应该在DbContext的
OnModelCreating
方法中完成。DbContext类将位于EntityFramework文件夹下的EntityFramework项目中
您可以使用以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Property>().HasRequired(e => e.Address).WithOptional(e => e.Property);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity().HasRequired(e=>e.Address)。with可选(e=>e.Property);
}
如果地址
的属性
不应为空,则可以根据用例将.WithOptional()
方法替换为WithRequiredDependent()
或WithRequiredPrincipal()
另一种解决方案:
在EF7中找不到可选的等效方法。按照约定,如果FK属性可为空,则导航属性将被视为可选属性
modelBuilder.Entity<Blog>()
.HasOne(p => p.Document)
.WithOne(i => i.CancelNote)
.HasForeignKey<Document>(b => b.CancelNoteForeignKey);
modelBuilder.Entity()
.HasOne(p=>p.Document)
.WithOne(i=>i.CancelNote)
.HasForeignKey(b=>b.CancelNoteForeignKey);
关于第二个问题,efcore(EF7)不支持延迟加载。在该链接中,您将找到现在加载相关实体的选项
PS:请使用您自己的实体名称。谢谢您的支持:)