为什么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 ???
答案 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的任何更改都将被清除。
其他选择:
还有一点:我很少看到SqlMetal发出的关联名称很糟糕。你的专栏是如何命名的?是否与另一个关系名称发生冲突?