[英]Entity Framework 6 Fluent Mapping - One to Many Code First
给定以下SQL表:
EntityGroup:
Id int, (PK)
GroupName nvarchar(100)
Entity:
Id int, (PK)
EntityGroupId int, (FK Non-nullable)
Description nvarchar(100)
以及以下POCO
public class Entity
{
public int Id { get; set; }
public int EntityGroupId { get; set; }
public int RefNumber { get; set; }
}
public class EntityGroup
{
public int Id { get; set; }
public virtual IList<Entity> Entities { get; set; }
}
如何正确配置流利的映射? 我希望Entity.EntityGroupId保持为int而不是EntityGroup对象。
我希望能够.Include()(可选)Include(“ Entities”)。 我得到的最接近的是这个,但是即使我不使用.Include(“ Entities”),这似乎也渴望加载所有实体,这不是我想要的行为:
modelBuilder.Entity<EntityGroup>()
.HasMany(x => x.Entities);
您必须取消延迟加载,您可以通过设置dbContext来完成特定工作单元或全部工作。
dbContext.Configuration.LazyLoadingEnabled = false;
dbContext.Configuration.ProxyCreationEnabled = false;
或在您的DbContext的Ctor中进行设置。
以我的理解,您想在EntityGroup
和Entity
之间配置one-to-many
关系,而没有Entity
类中的导航属性,并使用Entity.EntityGroupId
作为FK。 具备Fluent API的所有功能。
有可能,但是您必须从具有导航属性的类(在您的情况下为EntityGroup
)开始配置,因为Has
方法需要属性访问器,而With
方法具有无参数重载。 像往常一样,最后一部分将使用HasForeignKey
方法:
modelBuilder.Entity<EntityGroup>()
.HasMany(e => e.Entities)
.WithRequired()
.HasForeignKey(e => e.EntityGroupId);
但是请注意,EF可以识别示例类(尤其是EntityGroupId
)中使用的命名约定,因此EntityGroupId
任何流畅的配置或数据注释,即可获得相同的映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.