我们正在使用实体框架4.1 - 代码优先。我们需要能够命名我们的约束,而不是由SQL Server自动生成它们的名称。这可能吗?
我们需要:PK_Users_UserId, 不是:PK_Users_87329729C
答案 0 :(得分:3)
简短的回答是否定的。更长的答案是关于代码的含义。代码优先意味着您对数据库不感兴趣 - 您只需让EF创建一些,这就是您所需要的。它允许您定义表和列的名称(特别是在使用现有数据库时非常有用),但这就是全部。
如果您需要在此级别中使用数据库,则需要数据库优先方法。首先滥用代码来命名约束是可能的,但它非常困难和复杂(它需要在创建后删除旧约束并创建一个新约束 - 例如here)。
答案 1 :(得分:1)
您可以在创建后运行一些原始sql来重命名它们吗?您可能需要禁用EdmMetadata约定。
context.Database.ExecuteSqlCommand(
@"DECLARE @pk sysname
SELECT @pk = name FROM sysobjects WHERE parent_obj = object_id('users') and xtype = 'pk'
EXEC sp_rename @pk, 'pk_users_UserId'
");