SqlMetal生成垃圾关联名称

时间:2009-05-05 06:32:17

标签: linq-to-sql code-generation datacontext sqlmetal

为什么SqlMetal搞乱了Association的名字。对于例如在我的'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',它会生成这个名为property的垃圾:

[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 Code ???

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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发出的关联名称很糟糕。你的专栏是如何命名的?是否与另一个关系名称发生冲突?