从Entity Framework类

时间:2016-10-06 11:35:18

标签: c# entity-framework asp.net-core t4

我正在使用一个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));
}

1 个答案:

答案 0 :(得分:1)

如果您有权访问生成的DbContext,则可以使用DbContext.Model提供的元数据而非反射。

例如:

foreach (var type in db.Model.GetEntityTypes())
{
    foreach (var property in type.GetProperties())
    {
        var defaultValue = property.Relational().DefaultValue;
    }
}

还有许多有用的方法,如IModel.FindEntityTypeIEnityType.FindProperty等。