EF4.1 Code First: Как установить имя объекта базы данных index / pk? - PullRequest
0 голосов
/ 31 августа 2011

Code first EF генерирует первичный ключ и индексные объекты без имен.Sql Server, в свою очередь, автоматически генерирует имена для этих объектов в форме:

PK__Invitati__033C8DCF03317E3D

Я не могу найти код, чтобы сначала установить для него что-то более приятное, например PK_Invitation, это невозможно?*

Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Нет пути. Если вы хотите изменить его, вы должны создать собственный инициализатор базы данных, который найдет созданные PK, отбросит их и создаст заново с вашими собственными именами. Вот пример , использующий аналогичный подход для изменения ограничения по умолчанию.

0 голосов
/ 04 сентября 2011

Я использовал SMO для переименования первичных ключей. Полная рецензия на блог доступна здесь ; включая этот фрагмент кода:

  // Get a Server object from the existing connection
  var server = new Microsoft.SqlServer.Management.Smo.Server(
    new Microsoft.SqlServer.Management.Common.ServerConnection
      (context.Database.Connection as System.Data.SqlClient.SqlConnection));
  // Get a database object. Qualify names to avoid EF name clashes.
  Microsoft.SqlServer.Management.Smo.Database database =
    server.Databases[context.Database.Connection.Database];

  // Rename auto generated primary key names
  (
    from Microsoft.SqlServer.Management.Smo.Table table in database.Tables
    where table.Schema == "WebApp"
    from Microsoft.SqlServer.Management.Smo.Index index in table.Indexes
    where index.IndexKeyType == 
      Microsoft.SqlServer.Management.Smo.IndexKeyType.DriPrimaryKey
    // Create pairs of a name string and an Index object
    select new { table.Name, index }
  // ToList() separates reading the object model above from modifying it below
  ).ToList()
  // Use extension and anonymous methods to rename the primary keys
  .ForEach(primaryKey =>
    {
      // Name primary keys "PK_TableName"
      primaryKey.index.Rename(
        "PK_" + primaryKey.Name.Replace("[", "").Replace("]", ""));
      primaryKey.index.Alter();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...