【发布时间】:2018-03-21 22:36:14
【问题描述】:
请考虑 EF6 代码优先数据库。我有:
public class Base
{
public int Id { get; set; }
}
public class Desc1 : Base
{
public string Foo { get; set; }
}
public class Desc2 : Base
{
public int? Foo { get; set; }
}
我希望表 Base 有三列(以自动方式):
Base_Id INT NOT NULL
Desc1_Foo VARCHAR(MAX) NULL
Desc2_Foo INT NULL
我的意思是,以它的类名为前缀。我知道我可以使用EntityTypeConfiguration 来做到这一点,但是我的数据库有 150 个表,我无法配置每一列。
所以我尝试使用命名约定:
public class PrefixConvention : IStoreModelConvention<EdmProperty>
{
public void Apply(EdmProperty property, DbModel model)
{
property.Name = property.DeclaringType.Name + "_" + property.Name;
}
}
...
modelBuilder.Conventions.Add(new PrefixConvention());
但property.DeclaringType.Name 只显示Base 而不是Desc1 或Desc2,它总是会创建这个:
Base_Id INT NOT NULL
Base_Foo VARCHAR(MAX) NULL
Base_Foo1 INT NULL
我调查了EdmModel 类,但我找不到获取源自表中字段的类名的方法!
【问题讨论】:
-
谢谢,但问题是这段代码没有考虑我是否将字段设置为忽略。在这种情况下,这段代码会产生一个异常,因为它试图配置一个在某处被忽略的字段。
-
不,当然不是。这只是解释我的问题的一个例子。但是我已经解决了,我在下面发布了答案! :)
标签: c# entity-framework entity-framework-6 ef-code-first