我有很多表,SQL Views提供了一些查询。
我不想要的是创建维护噩梦,开发人员首先更改代码中的列,导致一个或多个SQL视图中断。
EF中是否有机制来检查这个?
答案 0 :(得分:0)
视图是否映射到EF?
通常我会运行EF配置测试来检查所有表格
我也发布了主要代码,但它只有在主键包含一个且只有一个名为Id的属性时才有效。你可以修改它调用FirstOrDefault方法(你可以看看如何调用它How do I use reflection to call a generic method?)。
[TestMethod]
public void All()
{
var properties = typeof (Context).GetProperties().Where(p => IsSubclassOfRawGeneric(typeof(DbSet<>), p.PropertyType));
foreach (PropertyInfo property in properties)
{
Type entityType = property.PropertyType.GetGenericArguments()[0];
PropertyInfo idProperty = entityType.GetProperty("Id");
if (idProperty == null)
{
Console.WriteLine("Id property not found. Cannot check type configuration");
continue;
}
Type idPropertyType = idProperty.PropertyType;
DbSet dbSet = _context.Set(entityType);
if (idPropertyType == typeof(string))
{
try
{
dbSet.Find("A");
}
catch (Exception e)
{
throw new Exception("Cannot access to DbSet " + property.Name, e);
}
}
else if (idPropertyType == typeof (int))
{
try
{
dbSet.Find(1);
}
catch (Exception e)
{
throw new Exception("Cannot access to DbSet " + property.Name, e);
}
}
else
{
Console.WriteLine("Id property type not supported ('{0}'). Cannot check type configuration", idPropertyType.Name);
continue;
}
}
}
static bool IsSubclassOfRawGeneric(Type generic, Type toCheck)
{
while (toCheck != null && toCheck != typeof(object))
{
var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
if (generic == cur)
{
return true;
}
toCheck = toCheck.BaseType;
}
return false;
}
答案 1 :(得分:0)
不,没有。在一长串争论中,为什么代码首次迁移是玩具,而不是工具。
将其与在SSDT环境中维护数据库并手动生成AND VALIDATING更改脚本进行比较。迁移转变为加载SQL脚本并执行它们&#34;使用任何非基线功能的那一刻(这些功能很有用)会更快。
所以,没有。
您可以做的是使用单元/集成测试自动测试应用程序在上次迁移时的工作情况。自动化救援测试。