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

本文关键字:数据库 之间 SQL 验证 运行时 EF 数据模型 EDMX 列出 | 更新日期: 2023-09-27 18:01:11

我想在应用程序启动时对所有现有的数据模型实体和潜在的存储过程(针对它们的代表性数据库表(进行.NET实体框架健康检查。我们使用数据库优先的方法,因此在生产中使用容易出现手动执行错误的SQL脚本进行更改。

这将使我能够以可控的方式(自定义错误处理(识别任何同步问题(尤其是在部署之后(。为新版本部署提供更高级别的信心,并更快地调试问题。

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

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

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

好的,所以我找不到一个内置机制来完成这项工作,所以我不得不使用反射来获取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();
}