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

Posted

技术标签:

【中文标题】如何关联不同 dbml 图上的 Linq-To-Sql 对象?【英文标题】:How to relate Linq-To-Sql objects that are on different dbml diagrams? 【发布时间】:2009-09-07 12:46:22 【问题描述】:

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

我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

是的,2 个不同的数据上下文,但一个对另一个可见。不知道 SqlMetal 是什么;我只是从服务器资源管理器中拖放表格。【参考方案2】:

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

【讨论】:

是的,但我没有这个选项,因为第二张图在不同的项目中。【参考方案3】:

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

这只有 AFAI 可以看出的一个缺点:在实际外键字段的 set 属性中有一段生成的代码,如果您尝试在已经存在值的情况下设置该值,则应该引发异常:

if (this._Parent.HasLoadedOrAssignedValue)

  throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

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

【讨论】:

以上是关于如何关联不同 dbml 图上的 Linq-To-Sql 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地在条形图上的条形图上显示数据框的不同列值?

如何在 matplotlib 中添加悬停注释

如何区分 MATLAB 图上的多条重叠线?

如何在LINQ-To-SQL中排除Contex.InsertOnSubmit()上的用户定义字段?

Plotly:散点图上的不同符号

大型连通图上的休眠 SaveOrUpdate