Pie*_* SS 9 .net c# entity-framework fluent-interface code-first
我有一个基础对象,我不希望在DB中作为一个实体映射,我只希望将属性添加到DB中映射的对象:
没有映射的对象(不知道它是否重要但是baseobject在另一个程序集中):
public class BaseObject
{
public virtual string Prop1 { get; set; }
public virtual string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
映射对象:
public class ChildObject : BaseObject
{
public virtual string Prop3 { get; set; }
public virtual string Prop4 { get; set; }
public virtual string Prop5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
什么在DbContext中注册
public DbSet<ChildObject> ChildObjects { get; set; }
Run Code Online (Sandbox Code Playgroud)
我想在Db看到什么
table:ChildObject
col:Prop1 (from BaseObject)
col:Prop2 (from BaseObject)
col:Prop3
col:Prop4
col:Prop5
Run Code Online (Sandbox Code Playgroud)
要恢复,我想要做的是在Db中有一个具有子项和基本属性的表.
这是我目前得到的错误:
未映射类型"namespace.ChildObject".使用Ignore方法或NotMappedAttribute数据批注检查未明确排除类型.验证类型是否已定义为类,不是原始类,嵌套类还是通用类,并且不从EntityObject继承.
我一直在挖,但找不到怎么做.
有任何想法吗?
编辑:
@Kyle Trauberman是正确的,但由于某种原因,从不同程序集中的基类继承似乎存在问题.我只是这样做了.
class BaseObjectClone : BaseObject { } /* BaseObject being in another assembly */
public class ChildObject : BaseObjectClone {
public virtual string Prop3 { get; set; }
public virtual string Prop4 { get; set; }
public virtual string Prop5 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Kyl*_*man 10
Morteza Manavi有一篇博文,详细介绍了如何做到这一点:
基本上,你需要重写OnModelCreating你的DbContext,并呼吁MapInheritedProperties()每个子表的.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<BankAccount>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("BankAccounts");
});
modelBuilder.Entity<CreditCard>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("CreditCards");
});
}
Run Code Online (Sandbox Code Playgroud)