我有一个参考表,其中包含性别,地址类型,联系人类型等各种受控值查找数据.许多表具有此参考表的多个外键
我还有多对多关联表,它有两个外键到同一个表.不幸的是,当这些表被拉入Linq模型并生成DBML时,sqlMetal不会查看外键列的名称或约束的名称,而只会查看目标表.所以我最终得到了名为Reference1,Reference2的成员……对维护不太友好.例:
<Association Name="tb_reference_tb_account" Member="tb_reference" <====== ThisKey="shipping_preference_type_id" OtherKey="id" Type="tb_reference" IsForeignKey="true" /> <Association Name="tb_reference_tb_account1" Member="tb_reference1" <====== ThisKey="status_type_id" OtherKey="id" Type="tb_reference" IsForeignKey="true" />
当然,我可以进入DBML并手动更改成员名称,但这意味着我不能再遍历我的数据库模式.在模型的当前阶段,这不是一个选项,它仍在不断发展.
将参考表拆分成n个单独的表也是不可取的.
我可能会编写一个在每次生成后针对XML运行的脚本,并用从ThisKey派生的内容替换成员名称(因为我遵守这些类型的键的命名约定).
有人找到了解决这个问题的更好方法吗?
解决方法
所以我走了部分班路线.例如,我添加了以下成员来解决原始示例中的第一个引用成员:
public partial class tb_account { public tb_reference shipping_preference_reference { get { return this._tb_reference.Entity; } set { this.tb_reference = value; } }
这远非完美.它需要大型模型中的大量额外代码,并且取决于属性的顺序不变(如果将参考表的另一个外键添加到帐户表中,该成员实际上可能指向除了运输偏好).也有好处.由于我已经为其他目的编写了部分类,因此添加这些成员并不需要我重新构建应用程序.