我想知道EF4是否支持跨数据库关系?例如:
DB1
Author
Id
Name
Run Code Online (Sandbox Code Playgroud)
DB2
Posts
Id
Content
db1.Author.Id
Run Code Online (Sandbox Code Playgroud)
理想情况下,我需要做什么才能在我的ef4模型中获得这种关系?
你们有什么想法吗?
谢谢
我将我的域拆分为多个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)配对时,它确实有效.
关键问题:
那么为什么实体框架试图对一个既不在范围内也不会受到记录插入影响的实体的关系做一些事情呢?
我很高兴让生成的代码删除上面提到的属性,但我仍然希望保留导航属性.我将如何改变CSDL来实现这一目标?
注意:"子"模型的持久性不是优先级,它们现在的跨数据库外键的完整性也不是优先级.这些数据库使用SQL CE保留,但它们最初是从单个主SQL Server数据库生成的.
.net c# entity-framework ado.net-entity-data-model entityreference
在我们公司,我们与多个数据库系统(MySQL,MSSQL,PL/SQL,SQlite和SQLCe)合作开展各种项目.因此,我们开发了一个库,将所有内容放入一个很好的界面,我们可以连接到每个数据库,而不必担心现在背后的数据库.但是这个库总是需要在客户端计算机上安装每个数据库,因为.Net坚持认为(因为引用).因此,我们使用MEF创建数据库插件,其中应用程序仅在启动时加载适当的插件,并且我们不需要在主机系统上安装任何其他数据库系统.
无论如何,由于每个数据库的不同,我们仍然在努力.假设我们希望程序能够在目标数据库中自动生成所需的表和数据(如果它们不可用).或者,如果不同的数据库使用不同的数据类型.事情变得非常复杂,至于现在,我们也对使用LINQ2SQL感兴趣,LINQ2SQL似乎无法处理MySQL,SQlite和PL/SQL.
我的问题:
是否有任何免费/ oss C#库接管这项任务?我们可以完全控制我们的数据库而不考虑现在背后的数据库?