具有链式继承的EF鉴别器

时间:2015-04-23 09:09:59

标签: c# entity-framework

我正在尝试用我自己的常量(而不是EF的字符串常量)替换discriminator列。我的课程如下:

[Table("stor_store")]
public abstract StoreBase { /* Base fields */ }

public StoreTemplate : StoreBase {/* Extra fields */ }

public Store : StoreBase {/* Extra fields */ }

[Table("cust_customer")]
public Customer : Store { /* Extra fields */ }

[Table("engi_engineer")]
public Engineer : Store {/* Extra fields */ }

我一直在尝试使用流畅的API映射列:

modelBuilder.Entity<StoreBase>()
    .Map<StoreTemplate>(m => m.Requires("stor_type").HasValue((byte)0)
    .Map<Store>(m => m.Requires("stor_type").HasValue((byte)1))
    .Map<Customer>(m => m.Requires("stor_type").HasValue((byte)2))
    .Map<Engineer>(m => m.Requires("stor_type").HasValue((byte)3));

但是EF总是创建鉴别器列。这种映射以前有用,但是双嵌套继承似乎已经抛出了它。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我可以在这里看到你的问题,我想这是因为SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); String restoredText = prefs.getString("text", null); if (restoredText != null) { String name = prefs.getString("name", "No name defined");//"No name defined" is the default value. int idName = prefs.getInt("idName", 0); //0 is the default value. } 已经被分配了一个值,所以当你尝试设置继承实体的值时,它可能会失败吗?

您可以尝试不同的顺序:重新排序没有帮助!

Store

另一种方法

但是,随着你的继承变得越来越复杂,你应该考虑实现类似“每种类型的表”(TPT)策略吗?这种方法可以将您的类型分成他们自己的表,节省空列以获得更小的鉴别器,并为您提供更清晰的结构。

enter image description here

您可以在此处找到完整说明的详细信息:http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt