如何关联不同 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章