gpt4 book ai didi

c# - 继承 EF Code-First

转载 作者:太空狗 更新时间:2023-10-29 17:48:29 26 4
gpt4 key购买 nike

我有一个基础对象,我不想将其作为实体映射到数据库中,我只想将属性添加到映射到数据库中的对象中:

未映射对象(不知道这是否重要,但 baseobject 在另一个程序集中):

public class BaseObject
{
public virtual string Prop1 { get; set; }
public virtual string Prop2 { get; set; }
}

映射对象:

public class ChildObject : BaseObject
{
public virtual string Prop3 { get; set; }
public virtual string Prop4 { get; set; }
public virtual string Prop5 { get; set; }
}

DbContext 中注册了什么

  public DbSet<ChildObject> ChildObjects { get; set; }

我希望在 Db 中看到什么

table:ChildObject 
col:Prop1 (from BaseObject)
col:Prop2 (from BaseObject)
col:Prop3
col:Prop4
col:Prop5

要恢复,我想做的是在 Db 中有一个表,该表具有子属性和基本属性。

这是我目前遇到的错误:

The type 'namespace.ChildObject' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from 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; }
}

最佳答案

Morteza Manavi 有一篇博文详细介绍了如何做到这一点:

http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

基本上,您需要覆盖 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");
});
}

关于c# - 继承 EF Code-First,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9894951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com