如何关联不同dbml图上的Linq-To-Sql对象?

时间:2009-09-07 12:46:22

标签: c# linq linq-to-sql or-designer

我有两个不同的dbml图表反映了我的Linq-To-SQL类。 (这是必要的,因为它们出现在不同的项目中。)一个图中的一个对象需要与另一个图中的对象关联。

我该怎么做?

3 个答案:

答案 0 :(得分:0)

实际上,您的两个图表将生成两个不同的数据上下文。我还猜你在图表上使用SqlMetal来生成实体。

您需要在一个图表中包含所有关联的对象,否则datacontext将无法从数据库中检索该关系。

另一个选择是使用自定义实体和XML映射文件。

答案 1 :(得分:0)

事实证明,我发现实现这一目标的最简单方法是强迫这种关系。我创建了自己的部分类来匹配包含FK的类,并且模仿了我为其他关系找到的生成代码。

这只有AFAI可以告诉的一个缺点:在实际外键字段的set属性中有一段生成的代码,如果你尝试在已经存在值时设置值,则应该抛出异常:

if (this._Parent.HasLoadedOrAssignedValue)
{
  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}

但是我准备好在没有它的情况下生活,只要我知道我不应该明确地设置FK字段。

答案 2 :(得分:0)

我自己对此问题表示担忧,这就是为什么在我的情况下,我将所有实体放在一个上下文中。现在设计器中使用的上下文太大而且太复杂(加载大约需要20分钟,可能有100多个实体),因此我们使用SQLMetal(DBML编译器/生成器的命令行形式)来构建它。 DBML本身由我为设计模式而创建的工具维护(生成)。这不是你问题的答案,而是解决这个问题的一种方法。