我有麻烦得到这个权利...EntityFramework - 核心项目与Web项目与共享实体?
我有一个通用的功能集合,包括例如标记“核心”项目。标记包括一组实体,其中一些包括Tag
和ObjectTag
。
他们基本上是这样的:
Tag (uniqueidentifier TagId, nvarchar(max) Tag)
ObjectTag (uniqueidentifier TagId, uniqueidentifier ObjectId)
我的“芯”项目还包含DbContext
的数据模型称为CoreEntities
。因此,我可以做到以下几点:
from ot in CoreEntities.Tag select ot where ot.TagId = "{someguid}"
我也有一个“网络”项目,该项目包括特定对象到我的网站,例如配方。食谱是这样的:
Recipe (uniqueidentifier RecipeId, string Name)
我的“网络”项目也有相应的上下文(WebEntities
)数据模型,提出了以下可能:
var recipes = from r in WebEntities.Recipe
select r
where r.Name == "Granny's Meatloaf"
foreach(var r in recipes) {
var recipeTags = from t in CoreEntities.ObjectTag
select t
where t.ObjectId == r.RecipeId
}
这是非常耗费资源为每个Recipe
必须提取相应的ObjectTag
记录。尝试加入实体时,出现以下错误:“指定的LINQ表达式包含对与不同上下文关联的查询的引用”。 这是否意味着我需要将ObjectTag
添加到我的WebEntities
上下文中?可能还有其他一些有效的方法来加入两者?
你真的需要两个独立的环境中? – veblock 2012-03-04 22:54:25
@veblock:我有两个单独的程序集和两个不同的'.edmx'文件。 Visual Studio会自动创建两个上下文......我不确定是否可以以某种方式重新使用上下文?我更喜欢重复使用我的“Core”项目中的上下文,但不能将“Web”实体添加到“Core”.edmx中。文件。 – ReFocus 2012-03-05 10:57:13
好吧,想不到任何简单的解决方案。只要你有两个不同的上下文,这将是资源密集型的。我宁愿想出适合这两种情况的通用实体模型。 – veblock 2012-03-05 22:10:28