如何使用数据库优先方法命名外键

6
有没有一种方法可以使用Entity Framework更改命名约定?
例如:我有两个表
Planification
--------------
creator_id <fk>
guest_id <fk>


Profile
--------------
profile_id <pk>

creator_idguest_id都是profile_id的外键。

默认情况下,实体会生成一个计划类,如下所示:

public string guest_id { get; set; }
public string creator_id { get; set; }

public virtual Profile Profile { get; set; }
public virtual Profile Profile1 { get; set; }

我希望你能给ProfileProfile1这样的名称取一个更加具体的名字,例如GuestCreator
我是否有办法更改命名约定,因为让它保持原样让我感到非常内疚。
1个回答

8
在你的edmx中,你可以通过点击属性并更改 Name 来重命名导航属性。
注意,如果你删除了表并从数据库重新构建它,你将不得不在edmx中重新命名它。
如果你对此感到足够烦恼,一个解决方法是使用一个部分类和一个属性来给默认命名的属性命名。
public partial class Planification
{
    public Profile Creator 
    { 
        get{ return this.Profile1; }
        set{
            this.Profile1 = value;
        } 
    }

    public Profile Guest 
    { 
        get{ return this.Profile; }
        set{
            this.Profile = value;
        } 
    }
}

1
这正是我所想的,没有简单的方法。我会使用部分类。这是一个绝妙的主意。谢谢! - Marc
2
请注意,如果添加另一个外键并重新创建edmx,则“Profile1”可能会更改上下文。 - MichaelD
1
@Shoe 是的,但这会使它变得非常危险。如果在某个时刻,一个外键不再需要并从表中删除。下面所有参考该外键的内容都将发生变化。根据您使用它们的方式,可能会在不给出编译错误的情况下破坏整个应用程序。您的方法将保持代码更改在一个地方。 - MichaelD
1
@MichaelD 我不同意它是“非常危险”的说法,但是如果你在更改键时出现问题,那么确实会有问题。当进行更改时,您应该尽责地测试您的应用程序。我认为这个解决方案比在edmx中重命名属性更容易管理,因为当表重新生成时,这些属性将被硬删除。如果您有更好的解决方案,我很愿意听取。 - jamesSampica
1
@Shoe,“这种情况可能会发生”,如果您的业务逻辑突然使用另一个外键而您没有注意到任何构建错误或警告,那么后果可能是灾难性的。仅仅因为其他地方发生了一些变化。如果我有时间,我会编写一个后处理脚本来更新edmx xml。根据外部列名更改名称。 - MichaelD
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接