我将我的域拆分为多个实体框架模型。我有一些跨越多个模型的共享实体(名为 Lookup),但是,这些实体被使用在实体框架中处理大型模型中描述的方法替换为“使用”引用。但是,使我的案例更加独特的是,我还将这些模型分成多个数据库(每个模型一个)。
我在将我的一个共享实体插入我的公共数据库时遇到问题。它因错误而失败:
元数据集合中不存在身份为“Harmony.Members.FK_ResidentialAddress_ResidenceTypeLookup”的成员。
它所指的外键在“公共数据库”上不存在。但我也没有与关系另一端的实体(名为 ResidentialAddress)合作;我什至没有包含已初始化的其他实体(名为 MembersDb)的上下文。但是,两个模型都编译到同一个程序集中。
没有从Lookup 到 ResidentialAddress 的导航属性。虽然在另一个方向有一个导航属性(我不会坚持 - 只在内存中使用)。
MetadataWorkspace
CommonDb 上下文的MyEntityConnection
仅使用 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
关键问题:
那么,为什么实体框架试图对既不在范围内也不会受到插入记录影响的实体的关系做一些事情!?
我很高兴生成的代码删除了上面提到的属性,但我仍然希望保留导航属性。我将如何改变 CSDL 以实现这一目标?
注意:“子”模型的持久性不是优先事项,它们现在跨数据库外键的完整性也不是优先事项。这些数据库使用 SQL CE 进行持久化,但它们最初是从单个主 SQL Server 数据库生成的。