2

为什么 SqlMetal 弄乱了关联名称。例如,在我的“TextMessage”表中,我有两列引用“ApplicationUser”表。'SenderUserId' 和 'RecipientUserId'

当我运行 SqlMetal 并查看我的“ApplicationUser”类时

对于“RecipientUserId”,它会生成:

[Association(Name="FK__TextMessa__Recip__72910220", Storage="_TextMessages", ThisKey="Id", OtherKey="RecipientUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> TextMessages
        {
            get
            {
                return this._TextMessages;
            }
            set
            {
                this._TextMessages.Assign(value);
            }
        }

对于“SenderUserId”,它会生成这个名为垃圾的属性:

[Association(Name="FK__TextMessa__Sende__73852659", Storage="__TextMessa__Sende__73852659s", ThisKey="Id", OtherKey="SenderUserId", DeleteRule="NO ACTION")]
        public EntitySet<TextMessage> _TextMessa__Sende__73852659s
        {
            get
            {
                return this.@__TextMessa__Sende__73852659s;
            }
            set
            {
                this.@__TextMessa__Sende__73852659s.Assign(value);
            }
        }

我该如何补救?这是不可用的。有没有更好的方法来生成 Linq To Sql 代码???

4

2 回答 2

3

它根据外键生成名称。将您的外键命名为比自动生成的名称更易读的名称。例如:

约束 RecipientMessages FOREIGN KEY(RecipientUserId) 引用 ApplicationUser(UserId)

于 2011-12-27T07:40:41.437 回答
1

您可以指示 SqlMetal 生成 DBML 文件:

SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind

然后更正 DBML 文件中的关联名称,然后从 DBML 生成:

SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml

这样做的唯一问题是,如果您在更新数据库后重新生成 DBML,对 DBML 的任何更改都会被清除。

其他选项:

  • 使用 Visual Studio 的设计器(如果您的架构很大,则不是很好)
  • 搜索第三方工具生成DataContexts
  • 编写自己的工具

还有一点:我很少看到 SqlMetal 发出这么糟糕的关联名称。您的列是如何命名的?与另一个关系名称是否有冲突?

于 2009-05-05T08:56:32.830 回答