从实体框架类获取默认sql值

本文关键字:默认 sql 获取 实体 框架 | 更新日期: 2023-09-27 18:12:02

我正在使用一个T4模板,从这个答案中提出的模板稍微修改,从我的EF poco生成typescript接口。

EF Core POCOs是先在数据库中生成的,部分数据库列有默认值。这些都被EF生成器正确地映射到我的上下文中,例如.HasDefaultValueSql("0");

我对如何访问给定EF类的默认值有点困惑,我曾认为GetValueOrDefault可能会做到这一点,但这只是给。net类型的默认值。

我看到有一些其他的解决方案在那里得到这个工作,但我似乎找不到一个还与asp.net Core工作。

理想情况下,我想知道如何确定一个属性是否从它的MemberInfo中有一个默认的EF值,因为T4模板的下面一行正在生成属性描述,这将是最容易修改的,以输出TypeScript def的默认值。

foreach (MemberInfo mi in GetInterfaceMembers(t))
{
    sb.AppendFormat("  {0}: {1};'n", mi.Name, GetTypeName(mi));
}

从实体框架类获取默认sql值

如果您可以访问生成的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