我有一个实体模型(EDMX)文件和EF 4.3.1。我正在尝试对EDMX进行运行时修改(更改生成查询时使用的表/ entitySets的store:Schema
)。我正在使用基于B. Haynes的EF Model Adapter项目的代码。
看来我可以使用架构模型适配器对XML进行更改,并将其加载到元数据工作区,然后将其传递给连接。但是,当查询由DbContext / EF框架代码生成时,它使用架构的旧值。
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,
答案 0 :(得分:0)
原来问题在于实体集下的<DefiningQuery>
元素。
此元素包含用于定义实体的基本查询的定义。也许某些事情发生了变化,现在他们出于速度原因提到了有必要修改该查询,然后架构更改才会生效。
<EntitySet Name="MYTABLE" store:Type="Tables" store:Schema="MYSCHEMA" ...>
<DefiningQuery>
SELECT MYTABLE.COLUMN [...REPEAT..]
FROM MYSCHEMA.MYTABLE AS MYTABLE
</definingQuery>
因此,在这两个位置更改"MYSCHEMA"
会修复它。只是store:Schema
元素是不够的。