编辑 – 清理问题以更好地反映实际问题:
我正在使用sqlMetal从我们的sql Server数据库生成数据库类.最近,我需要添加一个表,其中有多个外键指向同一个表.使用LINQPad来使用新表,我能够访问两个外键的属性,如下所示:
> record.FK_AId
> record.FK_BId
> record.FKA
> record.FKB
……这就是我期待它的方式.问题是,sqlMetal生成的类产生以下属性:
> record.FK_AId
> record.FK_BId
> record.FKA
> record.FKBTableNameGoesHere
现在我可以只生成生成的类,因此FKBTableNameGoesHere将是FK_B,但生成的文件经常被不同的团队成员更改,因此这将是一个巨大的痛苦.有一个简单的解决方案吗?
提前致谢.
编辑2
所以,我认为解决方案是创建一个具有名为我想要的属性的部分类,并让getter / setter指向名称不佳的属性.这有助于选择,但不能在where子句中使用它.任何人都有解决方案?
解决方法
所以,我的解决方案是添加另一个部分类并添加一个属性,其中get / set指向奇怪命名的FKBTableNameGoesHere属性.这样我们就不必继续修改生成的类了.不完全解决问题,但应该让开发人员更清楚属性意味着什么.有人看到该解决方案的任何潜在问题吗?
编辑 – 所以,显然这仅适用于选择数据而不是基于它的过滤.不像我希望的那样容易修复.有没有其他建议?
编辑2 – Jeeze,认为这将是一个常见的问题,但我想不是.无论如何,事实证明我是在正确的轨道上.我发现这篇文章:
Multiple foreign keys to the same table
这给了我一个想法,我不能直接链接到另一个属性的getter / setter,因为它可能比幕后更多.这个家伙的解决方案并不完全是答案,但它让我处于严谨的方向.添加关联属性是最终做到的:
public partial class ProblemClass { [Association(Name = "FK__SomeLinkHere",Storage = "_OriginalPoorlyNamedStorageVariable",ThisKey = "FK_1_Id",OtherKey = "Id",IsForeignKey = true)] public FKType MyNewBetterName { get { return this._OriginalPoorlyNamedStorageVariable.Entity; } set { this.OriginalPoorlyNamedStorageVariable = value; } } }
为那些仍然可以提出更清洁解决方案的人打开奖金.