【发布时间】:2011-07-30 07:43:04
【问题描述】:
我将我的域拆分为多个实体框架模型。我有一些跨越多个模型的共享实体(名为 Lookup),但是,这些实体使用Working With Large Models In Entity Framework 中描述的方法替换为“使用”引用。但是,使我的案例更加独特的是,我还将这些模型分成多个数据库(每个模型一个)。
我在将我的一个共享实体插入我的公共数据库时遇到问题。它因错误而失败:
有身份的成员 'Harmony.Members.FK_ResidentialAddress_ResidenceTypeLookup' 元数据中不存在 收藏。
它所指的外键不存在于“公共数据库”上。但我也不与关系另一端的实体(名为 ResidentialAddress)合作;我什至没有包含已初始化的其他实体(名为 MembersDb)的上下文。但是,两个模型都编译到同一个程序集中。
没有导航属性从 查找到 ResidentialAddress。虽然在另一个方向有一个导航属性(我不会坚持 - 只在内存中使用)。
我的 MetadataWorkspace 用于 CommonDb 上下文的 EntityConnection 已显式初始化,只有 SSDL/CSDL/MSL 用于该数据库所需的数据。我已经确认没有引用该组架构数据中提到的外键。
var metaAssembly = typeof(CommonDb).Assembly;
var schemaResources = new string[]
{
String.Format("res://{0}/Common.ssdl", metaAssembly.FullName),
String.Format("res://{0}/Common.csdl", metaAssembly.FullName),
String.Format("res://{0}/Common.mdl", metaAssembly.FullName),
}
MetadataWorkspace metadata = new MetadataWorkspace(schemaResources, new []{ metaAssembly });
EntityConnection connection = new EntityConnection(metadata, myDatabaseConnection);
可能的线索:当我进入生成的类并从相关模型 (MembersDb) 中删除所有 EdmRelationshipAttribute 属性及其配对 EdmRelationshipNavigationPropertyAttribute 时,它确实有效。
关键问题:
-
那么,为什么 Entity Framework 试图对既不在范围内也不会受到插入记录影响的实体的关系做一些事情!?
我很高兴生成的代码删除了上面提到的属性,但我仍然希望保留导航属性。我将如何改变 CSDL 以实现这一目标?
注意:“子”模型的持久性不是优先事项,它们现在跨数据库外键的完整性也不是优先事项。这些数据库使用 SQL CE 进行持久化,但它们最初是从单个主 SQL Server 数据库生成的。
【问题讨论】:
标签: c# .net entity-framework ado.net-entity-data-model entityreference