Entity Framework 与 ASP.NET 样板的一对一关系
Entity Framework 1-to-1 relationship with ASP.NET Boilerplate
我们在使用ASP.NET Boilerplate时,如何设置与以下模型的1:1关系?提前致谢。
注1:我看过this nice answer关于EF一对一的关系。但不幸的是,我不知道如何使用 ASP.NET Boilerplate 设置它,因为 PK 是由 ABP 自动设置的。在我的场景中,两个表都有 int
PK。
注2:这里,Property
和Address
模型有1:1关系。
Property
型号:
[Table("IpProperties")]
public class Property : FullAuditedEntity
{
public virtual bool Vacant { get; set; }
public virtual Address Address { get; set; }
}
Address
型号:
[Table("IpAddresses")]
public class Address : FullAuditedEntity
{
[Required]
[MaxLength(MaxLength)]
public virtual string StreetNumber { get; set; }
public virtual Property Property { get; set; }
}
关系映射应该在 DbContext 的 OnModelCreating
方法中完成。您的 DbContext class 将位于 EntityFramework 文件夹下的 EntityFramework 项目中。
您可以使用如下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Property>().HasRequired(e => e.Address).WithOptional(e => e.Property);
}
如果Address
的Property
属性不应该为null,.WithOptional()
方法可以换成WithRequiredDependent()
或WithRequiredPrincipal()
,取决于用例。
另一个解决方案:
ABP forum - REFERENTIAL INTEGRITY ISSUE - ONE TO ONE RELATIONSHIP
您不会在 EF7 中找到 HasOptional 等效方法。按照惯例,如果您的 FK 属性 可以为 null,则您的导航 属性 将被视为可选
modelBuilder.Entity<Blog>()
.HasOne(p => p.Document)
.WithOne(i => i.CancelNote)
.HasForeignKey<Document>(b => b.CancelNoteForeignKey);
关于你的第二个问题,EF Core (EF7) 不支持延迟加载。在此 link 中,您将找到现在用于加载相关实体的选项
PS: 请使用您自己的实体名称。
我们在使用ASP.NET Boilerplate时,如何设置与以下模型的1:1关系?提前致谢。
注1:我看过this nice answer关于EF一对一的关系。但不幸的是,我不知道如何使用 ASP.NET Boilerplate 设置它,因为 PK 是由 ABP 自动设置的。在我的场景中,两个表都有 int
PK。
注2:这里,Property
和Address
模型有1:1关系。
Property
型号:
[Table("IpProperties")]
public class Property : FullAuditedEntity
{
public virtual bool Vacant { get; set; }
public virtual Address Address { get; set; }
}
Address
型号:
[Table("IpAddresses")]
public class Address : FullAuditedEntity
{
[Required]
[MaxLength(MaxLength)]
public virtual string StreetNumber { get; set; }
public virtual Property Property { get; set; }
}
关系映射应该在 DbContext 的 OnModelCreating
方法中完成。您的 DbContext class 将位于 EntityFramework 文件夹下的 EntityFramework 项目中。
您可以使用如下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Property>().HasRequired(e => e.Address).WithOptional(e => e.Property);
}
如果Address
的Property
属性不应该为null,.WithOptional()
方法可以换成WithRequiredDependent()
或WithRequiredPrincipal()
,取决于用例。
另一个解决方案:
ABP forum - REFERENTIAL INTEGRITY ISSUE - ONE TO ONE RELATIONSHIP
您不会在 EF7 中找到 HasOptional 等效方法。按照惯例,如果您的 FK 属性 可以为 null,则您的导航 属性 将被视为可选
modelBuilder.Entity<Blog>()
.HasOne(p => p.Document)
.WithOne(i => i.CancelNote)
.HasForeignKey<Document>(b => b.CancelNoteForeignKey);
关于你的第二个问题,EF Core (EF7) 不支持延迟加载。在此 link 中,您将找到现在用于加载相关实体的选项
PS: 请使用您自己的实体名称。