我有两个不同的 dbml 图反映了我的 Linq-To-SQL 类。(这是必要的,因为它们出现在不同的项目中。)一个图中的一个对象需要与另一个图中的对象关联。
我该怎么做?
我有两个不同的 dbml 图反映了我的 Linq-To-SQL 类。(这是必要的,因为它们出现在不同的项目中。)一个图中的一个对象需要与另一个图中的对象关联。
我该怎么做?
实际上,您的两个图表将生成两个不同的数据上下文。我也猜你在图表上使用 SqlMetal 来生成你的实体。
您需要将所有关联对象包含在一个图表中,否则数据上下文将无法为您从数据库中检索该关系。
另一种选择是使用自定义实体和 XML 映射文件。
事实证明,我发现实现这一目标的最简单方法是强制建立关系。我创建了自己的部分类来匹配包含 FK 的类,并且只是模仿了我为其他关系找到的生成代码。
这只有一个缺点 AFAI 可以说:在实际外键字段的set
属性中有一段生成的代码,如果您在已经存在值的情况下尝试设置值,则应该引发异常:
if (this._Parent.HasLoadedOrAssignedValue)
{
throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}
但我准备好在没有它的情况下生活,只要我知道我不应该明确设置 FK 字段。
我自己也担心这个问题,这就是为什么在我的例子中,我将所有实体放在一个上下文中。上下文太大太复杂,现在无法在设计器中使用(加载大约需要 20 分钟,并且可能有 100 多个实体),因此我们使用 SQLMetal(DBML 编译器/生成器的命令行形式)来构建它. DBML 本身由我为设计模式而创建的工具维护(由该工具生成)。这并不完全是您问题的答案,而是解决此问题的一种方法。