我有一个实体模型 (EDMX) 文件和 EF 4.3.1。我正在尝试对 EDMX 进行运行时修改(更改store:Schema
用于生成查询的表/实体集)。我正在使用基于B. Haynes 的EF 模型适配器项目的代码。
看来我可以使用模式模型适配器对 XML 进行很好的更改,并将其加载到元数据工作区,然后将其传递给连接。但是,当 DbContext/EF 框架代码生成查询时,它使用架构的旧值。
- 创建一个新的 MyEntities
- 手动加载 EDMX 元数据
- 将“store:Schema”值替换为新的所需值
- 从修改后的 XML 创建元数据工作区
- 使用修改后的工作区返回一个新的 EntityConnection
- 查询数据 (
from x in db.Table select x
)
这是正在发生的事情的基础。我们通过基于修改后的工作空间和连接创建一个新的 EntityConnection 来创建我们的 dbContext。还有一些提供者包装等等,用于日志记录等。抱歉,如果这令人困惑。
public MyEntities(): base( this.Create("name=MyEntitiesConnStr"), true)
{
}
public static DbConnection Create(string connectionString)
{
var ecsb = ConnectionHelper.ResolveConnectionStringDetails(connectionString);
var workspace = GetModifiedEntityWorkspace(ecsb);
var storeConnection = DbProviderFactories.GetFactory(ecsb.Provider).CreateConnection();
Debug.Assert(storeConnection != null, "storeConnection != null");
storeConnection.ConnectionString = ecsb.ProviderConnectionString;
var wrappedConnection = MyWrappedConnetion.WrapConnection(storeConnection);
_log.Debug("Creating new entity connection");
var newEntityConnection = new EntityConnection(workspace, wrappedConnection);
WireEvents(wrappedConnection);
return newEntityConnection;
}
private static MetadataWorkspace GetModifiedEntityWorkspace(EntityConnectionStringBuilder ecsb)
{
// instantiate manager class
// read all XML items from the embedded resources
// change the store:schema to the real one for this environment
// <EntitySet Name="..." store:Type="Tables" store:Schema="SCM" store:Name="TBLX">
// create new MetadataWorksspace(ssdl,cdl,...)
}
知道在哪里/为什么它仍然获得Schema
查询的旧值吗?我认为它适用于 EF 4.0,