我正在努力让我的实体框架IdentityDbContext与现有的SqlConnection实例一起工作。基本上,我有:
public class MyContext : IdentityDbContext<User> {
private static DbCompiledModel CreateDbCompiledModel()
{
//if (_compiledModel != null) return _compiledModel;
using (var context = new KmContext())
{
var internalProp = typeof (DbContext)
.GetProperty("InternalContext", BindingFlags.NonPublic | BindingFlags.Instance);
var internalContext = internalProp.GetValue(context);
var modelBeingInitProp = internalContext.GetType().GetProperty("CodeFirstModel");
var model = (DbCompiledModel) modelBeingInitProp.GetValue(internalContext);
return (_compiledModel = model);
}
}
public MyContext(SqlConnection conn):base(conn, base(existingConnection, CreateDbCompiledModel(), false)
{
}
//...
}
由于IdentityDbContext隐藏了构造函数DbContext(DbConnection,bool)(一个开放的问题 - https://aspnetidentity.codeplex.com/workitem/1991),我需要使用构造函数DbContext(DbConnection,DbCompiledModel,bool),它由IdentityDbContext使用的构造函数公开在上面的代码中。问题是传递DbCompiledModel的有效实例远非微不足道,因为它可以在静态方法CreateDbCompiledModel()中看到。此外,此代码不起作用,因为我有例外“无法检查模型兼容性,因为数据库不包含模型元数据。只能检查使用Code First或Code First Migrations创建的数据库的模型兼容性。”
我需要让它发挥作用,但我现在已经没法了。任何人都可以帮助我吗?