【问题标题】:What information does LINQPad use to generate Association attributes/Navigation Properties?LINQPad 使用哪些信息来生成关联属性/导航属性?
【发布时间】:2019-08-28 15:20:20
【问题描述】:

我正在使用 LINQPad 连接到 SQL Server 数据库,然后生成 TypedDataContext。

在旧版本的数据库中,表(不是通过 ASP.NET C# 代码生成的)具有其他表的导航属性。

在团队开发的新版本中,没有导航属性。

我的第一直觉是缺少约束,事实证明这是真的。开发人员将外键约束添加到表后,仍然没有导航属性。

使用ILSpy for LINQPad,我反思了表中表示的类型,发现在一个对象中存在具有Association属性的属性:

[XmlIgnore]
[Association(Name = "FK_AvailabilityActivity_SFT_WK_Shift", Storage = "_Ds_Shift", ThisKey = "SFT_WK,SFT_WK", OtherKey = "SFT_WK,SFT_WK", IsForeignKey = true)]
public Ds_Shift Ds_Shift
{
    get
    {
        //Error decoding local variables: Signature type sequence must have at least one element.
        return _Ds_Shift.Entity;
    }
    set
    {
        //Error decoding local variables: Signature type sequence must have at least one element.
        _Ds_Shift.Entity = value;
    }
}

而另一个新对象没有。

所以,我的问题是:

LINQPad 使用什么信息来生成这些属性?

一旦我知道了这一点,我应该能够使用导航属性跨表添加信息和查询。

【问题讨论】:

    标签: database linqpad


    【解决方案1】:

    根据 Joe Albahari(LINQPad 的作者)的说法:

    它只是读取外键约束并从中构建它。 有时它无法推断出关联的名称或名称 在另一个关联或属性中重复,但这很 很少见。

    所以我怀疑缺少约束是正确的,碰巧当开发人员添加缺少的约束时,表的主键被遗漏了(由于另一列具有聚集索引,SQL Server 试图创建默认情况下,当您分配主键时,我们使用 NONCLUSTERED 关键字解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多