我刚刚安装了新的实体框架4.1 NuGet包,因此取代了EFCodeFirst
包,按照NuGet入口和this article of Scott Hanselman。EF 4.1搞砸了。 FK命名策略是否改变?
现在,想象一下以下模型:
public class User
{
[Key]
public string UserName { get; set; }
// whatever
}
public class UserThing
{
public int ID { get; set; }
public virtual User User { get; set; }
// whatever
}
最后EFCodeFirst释放产生的UserThing
表的外键被称为UserUserName
。
安装新版本,运行我碰到下面的错误后:
Invalid column name 'User_UserName'
这当然意味着新的版本有不同的FK命名策略。这是所有其他的表和列中是一致的:无论FK EFCodeFirst命名AnyOldForeignKeyID
EF 4.1要调用AnyOldForeignKey_ID
(注意下划线)。
我不介意命名FK与下划线,但在这种情况下,它是指具有任何不必要扔掉数据库,并重新创建或重命名不必要的FK人的。
是否有人知道为什么FK命名约定已更改,以及是否可以在不使用Fluent API的情况下配置?
谢谢,我整个那篇文章来的太...可惜,但为什么它首先改变? – 2011-03-17 21:02:25
我更新了我的答案,其中包含有关如何解决问题的建议,但这不是很好,但它可能是最简单的。我不知道为什么改变了惯例。这是早期采用者的缺点之一,他们可以像这样改变你的东西。它也会影响我,因为我在我的个人网站上使用它,更糟糕的是,我写了一些自己的约定,所以我现在真的是一条小溪。 – 2011-03-17 21:04:41
所以你建议sp_rename把当前的FK重命名为新约定的内容?我想它必须这样做,谢谢! – 2011-03-17 21:13:16