我有两个来自图书馆的课程,即我不能改变:
public class EntityInfo
{
public Guid Id { get; set; }
//... some other properties
}
public class MyEntity
{
public Guid MyEntityId { get; set; }
public EntityInfo AnotherEntityInfo { get; set; }
//... some other properties
}
我需要将MyEntity映射到包含以下列的表:
MyEntityId uniqueidentifier,
AnotherEntityId uniqueidentifier -- Here the value of AnotherEntityInfo.Id should be mapped
-- ... some other properties
我不需要映射EntityInfo类型的其他属性,只需要映射Id。所以它就像展平EntityInfo并仅采用其Id。同样,我无法更改类MyEntity和EntityInfo
有没有人知道这样做的方法?
答案 0 :(得分:1)
您需要为类MyEntity更新ForeignKey,例如:
public class MyEntity
{
public Guid MyEntityId { get; set; }
[ForeignKey("AnotherEntityInfo")]
public int AnotherEntityInfoId { get; set; }
public EntityInfo AnotherEntityInfo { get; set; }
//... some other properties
}
你可以在这里阅读:source
答案 1 :(得分:1)
同样,我无法更改类MyEntity和EntityInfo
然后Fluent configuration是你唯一的选择。
重写您的DbContext
派生类OnModelCreating
方法,如下所示:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>()
.HasRequired(e => e.AnotherEntityInfo)
.WithMany()
.Map(c => c.MapKey("AnotherEntityInfoId"));
base.OnModelCreating(modelBuilder);
}
编辑:我误解了这个问题。如果EntityInfo
不是实体且在MyEntity
中仅使用 ,则您可以使用以下流畅配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Ignore all the properties except Id
modelBuilder.ComplexType<EntityInfo>()
.Ignore(e => e.Property1)
.Ignore(e => e.Property2)
...
.Ignore(e => e.PropertyN);
base.OnModelCreating(modelBuilder);
}
以上内容将在AnotherEntityInfo_Id
表中创建MyEntity
列。我没有找到指定列名的方法。