在LINQ中使用多个外键到同一个表

我有一个表用户和一个表项

在Items表中,我有诸如。的字段

ModifiedBy CreatedBy AssignedTo

其中都有一个userId整数。 数据库设置为将这些外键返回到用户表。

当使用LINQToSQL时,从dbml自动构建的关系最终给我提供了像User,User1和User2这样的名称

例如myItem.User1.Name或myItem.User2.Name

显然,这不是很可读,我希望它符合

myItem.CreatedByUser.Name或myItem.ModifiedByUser.Name等

我可以更改关系的名称,但这意味着我必须重做每次更改数据库模式并刷新dbml。

这有什么办法吗?


简单的答案:不。

有人提出了创建部分关联类的想法,其中属性名称被定义,但这也不起作用:通过部分类重命名LINQ 2 SQL实体属性。

您的选择是花一点时间学习更多关于LINQ到SQL的“幕后”,以便您可以手动进行必要的修改,或者只需通过“属性”窗口更改属性名称即可。 就个人而言,我只是删除/ redrag / rename,因为没有正确设置属性是一个调试的痛苦,因为抛出的异常让你不知道是什么原因造成的。 我甚至创建了一个单元测试库,它接受模型中的每个MetaTable对象并验证字段数,每个字段的ServerDataType内容,关联计数,每个关联的名称以及每个结尾的名称该协会。 每进行一些更改,我都会运行单元测试以确保模型完好无损。


首先,不...名称是根据关系中的第二个表创建的。

但是你应该知道的是,你不必“刷新”(意思就是,删除DBML中的表,然后重新拖放它)。

对于我正在开发的项目,我们有超过200个表格......其中大约50个表格是从数据库中拖动后手动调整的。 我们从不删除和重新拖动表格,因为自动生成后有太多变化。


我只是添加一个小的部分类来扩展具有适当命名属性的对象,如下所示:

namespace Database.TableModels {
    partial class WTSR_Induction {
        public EmailTemplate ConfirmationEmailTemplate {
            get { return EmailTemplate1; }
        }
        public EmailTemplate InviteEmailTemplate {
            get { return EmailTemplate; }
        }
    }
}

在此示例中, WTSR_Inductions表有两个指向EmailTemplates表的链接,因此具有EmailTemplateEmailTemplate1属性。

链接地址: http://www.djcxy.com/p/45297.html

上一篇: Using Multiple Foreign Keys to the same table in LINQ

下一篇: OpenGL ES 2.0 FBO creation goes wrong with unknown error