实体框架 - 插入具有多个模型和数据库的实体

Red*_*dog 7 .net c# entity-framework ado.net-entity-data-model entityreference

我将我的域拆分为多个Entity Framework模型.我有一些跨多个模型的共享实体(名为Lookup),但是,使用在实体框架中使用大型模型中描述的方法将这些实体替换为"使用"引用.然而,让我的案例稍微独特的是,我还将这些模型分成多个数据库(每个模型一个).

我在将一个共享实体插入公共数据库时遇到问题.它失败了,错误:

元数据集合中不存在具有标识"Harmony.Members.FK_ResidentialAddress_ResidenceTypeLookup"的成员.

它所指的外键在"公共DB"上存在.但我也没有在关系的另一端(命名为ResidentialAddress)与实体合作; 我甚至没有包含初始化的其他实体的上下文(名为MembersDb).但是,两个模型都编译到同一个程序集中.

Lookup到ResidentialAddress 没有导航属性.虽然在另一个方向有一个导航属性(我不会坚持 - 只在内存中使用).

MetadataWorkspace对于EntityConnectionCommonDb上下文的显式初始化仅使用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);
Run Code Online (Sandbox Code Playgroud)

可能的CLUE:当我进入生成的类并删除所有EdmRelationshipAttribute属性以及EdmRelationshipNavigationPropertyAttribute从相关模型(MembersDb)配对时,它确实有效.

关键问题:

  1. 那么为什么实体框架试图对一个既不在范围内也不会受到记录插入影响的实体的关系做一些事情呢?

  2. 我很高兴让生成的代码删除上面提到的属性,但我仍然希望保留导航属性.我将如何改变CSDL来实现这一目标?

注意:"子"模型的持久性不是优先级,它们现在的跨数据库外键的完整性也不是优先级.这些数据库使用SQL CE保留,但它们最初是从单个主SQL Server数据库生成的.

Dan*_*rod 7

如果模型的每个部分都写入单独的数据库,那么edmx文件可能不应该彼此了解(关于实体或与不属于它们的实体的关系).

如何尝试以下方法之一:(
最终为每个部分使用相同的实体类,但让EF忘记它们之间的连接.)

  1. 从edmx +取消自动生成中删除"使用"并自行创建类.
  2. 从edmx + modify t4模板中删除"usings"以在创建类时读取多个edmx.
  3. 将edmx文件复制到一边,这样就有两组edmx.
    3.A. 使用set#1自动生成实体.
    3.B. 通过删除"使用"来修改集#2,并用于生成存储库类(对象集).

如果其中一个有效,请告诉我.

祝你好运,丹尼.