如何覆盖默认LINQ to SQL关联名称

m1m5dgzv  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(125)

我正在开发一个非常简单的C#应用程序,它使用LINQ to SQL访问数据库。该应用程序是非Web(即胖客户端)应用程序。
我最近遇到的问题是LINQ to SQL为作为另一个表的外键的字段创建的默认关联名。更具体地说,我提供了下面的一个示例:
问题示例我的大多数组合框都是使用参考数据表中的值填充的(即RefData),它存储类型、说明和一些其他字段。当窗体最初加载时,它会根据按类型的查询用值填充组合框。例如,我有一个允许用户添加客户的窗体。在该窗体上,有一个状态的组合框。stateComboBox是通过对RefData表(其中type = stateType)运行查询来填充的。然后,当用户保存具有选定州的客户时,选定州的RefData列的id存储在customer表的state列中。但是,如果我的customer表中有多个列是RefData表的外键,那么它很快就会变得非常混乱,因为关联名称(s)是客户.参考数据、客户.参考数据1、客户.参考数据2、等等......如果我可以覆盖关联的名称,这样访问引用数据就更像是Customer.State、Customer.Country、Customer.Type等等,那就容易多了......
我已经考虑过在VS生成的DBML中更改此信息,但是我的数据库架构仍然非常不成熟,需要不断更改。现在,我每隔一两天就会删除DBML,以便在对数据库进行更改后重新生成LINQ to SQL文件。是否有一种简单的方法可以创建这些具有有意义名称的关联,并且在我频繁重新创建DBML时不会丢失这些名称?

lyr7nygr

lyr7nygr1#

我不确定LINQ to SQL是否是访问数据的最佳方法,但我发现在您的情况下它甚至更有问题。
真实的的问题是,您的域对象的概念相当静态(您知道程序需要使用什么来完成工作),但您不确定如何持久化数据,因为您的模式在不断变化。这不是一个自动更新的好场景。
如果是我的话,我会编写域模型,这样它们就不会改变,除非你想改变。然后我会决定如何链接到持久模式(在这个例子中是数据库)。如果你喜欢更自动化的,那么我会考虑实体框架,因为你可以先使用代码,然后在它改变时Map到模式。
如果您发现这样做仍然没有帮助,因为您的数据库模式更改与域模型不兼容,您需要从编码中解脱出来,进入更深层次的规划模式。否则,您将继续在更改的墙上碰壁。

9o685dep

9o685dep2#

为Customer表创建分部类定义,并为LINQ to SQL生成的成员名称添加更有意义的getter属性:

public partial class Customer
{
    public string Name { get; set; }
    [JsonIgnore]
    public RefData State => this.RefData;
    [JsonIgnore] 
    public RefData Country => this.RefData1;
}

我在博客上写了这个here

相关问题