我正在尝试用我自己的常量(而不是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总是创建鉴别器列。这种映射以前有用,但是双嵌套继承似乎已经抛出了它。谢谢你的帮助。
答案 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)策略吗?这种方法可以将您的类型分成他们自己的表,节省空列以获得更小的鉴别器,并为您提供更清晰的结构。
您可以在此处找到完整说明的详细信息:http://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt