在运行时验证EF数据模型(EDMX和SQL数据库架构之间的列表差异)

时间:2015-07-06 15:34:10

标签: c# .net entity-framework entity-framework-5

我想在应用程序启动时对所有现有数据模型实体和可能存储过程(针对其代表性数据库表)执行.NET实体框架运行状况检查。我们正在使用Database First Approach,因此使用容易出现手动执行错误的SQL脚本对生产进行了更改。

这将允许我以受控方式识别任何同步问题(特别是在部署之后)(自定义错误处理)。在新版本部署中提供更高的可信度,并更快地调试问题。

此外,这将添加到自诊断屏幕,以便基础架构人员可以随时验证数据库运行状况。

知道怎么做吗?我似乎无法找到这样做的本机EF机制,所以当你使用不可预测且很容易被错过的错误实体时它会失败。

1 个答案:

答案 0 :(得分:0)

好吧所以我找不到构建机制来执行此操作所以我必须使用反射来获取DB上下文中的所有实体,然后单独尝试在try catch中检索FirstOrDefaut()。它并不完美,但它会对EDMX和数据库之间的对齐提供更高的信心。

public static List<Type> GetAllEntities()
{
    var entityList = new List<Type>();
    var context = typeof(<DatabaseContextClass>);

    foreach (var property in context.GetProperties())
    {
        if (!property.PropertyType.IsGenericType
            || property.PropertyType.GetGenericTypeDefinition() != typeof(ObjectSet<>)) // EF 4
            continue;

        var entityType = property.PropertyType.GetGenericArguements()[0];
        entityList.Add(entityType);

        return entityList;  
    }
}

public static T GetFirstObject<T>() where T : EntityObject
{
    var context = new <DatabaseContextClass>();

    IQueryable<T> = dbQuery = context.CreateObjectSet<T>();

    return dbQuery.AQsNoTracking().FirstOrDefault();
}