我有一个带有EDMX模型的装配体。我可以成功地在构造函数中创建一个DbContext
指定一个连接字符串,其中包含对该程序集的引用(metadata=res://MyAssembly/MyModel.csdl|res://MyAssembly/MyModel.ssdl|res://MyAssembly/MyModel.msl ...
),在这种情况下一切正常。
但是,现在我遇到的情况是,我从外部来源获得现有DbConnection
,以及现有DbTransaction
。我希望在DbConnection
上有一个强类型的实体框架视图。因此,我使用的是另一个DbContext
构造函数,而不是使用连接字符串DbContext
构造函数,它使用DbConnection
(然后使用context.Database.UseTransaction()
来设置现有事务)
在这种情况下,只要我尝试访问其中一个表格,我就会收到错误The entity type MyType is not part of the model for the current context.
- 似乎我的模型没有“附加”到现有的DbConnection
。
所以,我的问题是:
DbConnection
?DbContext
构造函数同时包含DbConnection
和 DbCompiledModel
。这似乎正是我所需要的。如何从现有的包含EDMX的程序集中提取DbCompiledModel
?答案 0 :(得分:0)
只是我的运气,在发布赏金后立即找到答案:)几乎整个答案(减去关于交易的部分)是here - 我没想到搜索SqlConnection而不是DbConnection。
基本上,给定existingDbConnection
和existingDbTransaction
:
var workspace = new MetadataWorkspace(
new string[] { "res://*/" },
new Assembly[] { Assembly.Load("My.Assembly.Name")});
// can use Assembly.GetExecutingAssembly() if in current assembly
var wrappedConnection = new EntityConnection(workspace, existingDbConnection, false);
var context = new DbContext(wrappedConnection, false)
context.Database.UseTransaction(existingDbTransaction);