C# 实体框架与ASP.NET样板文件的1对1关系

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;

当我们使用时,如何设置与下面提到的模型的1:1关系?提前谢谢

注1:我已经了解了EF 1对1关系。但不幸的是,我不知道如何使用ASP.NET样板文件进行设置,因为PK是由ABP自动设置的。在我的场景中,两个表都有
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:请使用您自己的实体名称。

谢谢您的支持:)