实体框架4.1:名称约束

时间:2011-12-12 14:43:36

标签: entity-framework ef-code-first

我们正在使用实体框架4.1 - 代码优先。我们需要能够命名我们的约束,而不是由SQL Server自动生成它们的名称。这可能吗?

我们需要:PK_Users_UserId, 不是:PK_Users_87329729C

2 个答案:

答案 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'
");