linq – 同一个表的多个外键

我有一个参考表,其中包含性别,地址类型,联系人类型等各种受控值查找数据.许多表具有此参考表的多个外键

我还有多对多关联表,它有两个外键到同一个表.不幸的是,当这些表被拉入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;
        }
    }

这远非完美.它需要大型模型中的大量额外代码,并且取决于属性的顺序不变(如果将参考表的另一个外键添加到帐户表中,该成员实际上可能指向除了运输偏好).也有好处.由于我已经为其他目的编写了部分类,因此添加这些成员并不需要我重新构建应用程序.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...