我正在使用一个T4模板,该模板稍微修改了this答案中建议的模板,以便从我的EF POCO生成打字稿界面。
首先生成EF Core POCO数据库,并且某些数据库列具有默认值。这些由EF生成器正确映射到我的上下文中,例如.HasDefaultValueSql("0")
;
我对如何访问给定EF类的默认值感到有点困惑,我原以为GetValueOrDefault
可能会做到这一点,但这只是给出.net类型的默认值。 / p>
我看到有一些其他的解决方案可以让这个工作,但我似乎找不到一个可以与ASP .Net Core一起工作。
理想情况下,我想知道如何确定属性是否具有来自其MemberInfo的默认EF值,因为T4模板中的以下行生成属性描述,最容易修改它以输出默认值TypeScript def。
的值foreach (MemberInfo mi in GetInterfaceMembers(t))
{
sb.AppendFormat(" {0}: {1};\n", mi.Name, GetTypeName(mi));
}
答案 0 :(得分:1)
如果您有权访问生成的DbContext
,则可以使用DbContext.Model
提供的元数据而非反射。
例如:
foreach (var type in db.Model.GetEntityTypes())
{
foreach (var property in type.GetProperties())
{
var defaultValue = property.Relational().DefaultValue;
}
}
还有许多有用的方法,如IModel.FindEntityType
,IEnityType.FindProperty
等。