Ответ 1
Невозможно настроить имя ограничения внешнего ключа с аннотациями данных или DbModelBuilder
Fluent API. Однако вы можете управлять этим именем с помощью миграции на основе кода.
-
Первая опция: когда таблицы создаются с помощью миграции:
Код перехода, который автоматически генерируется для таблицы соединений, будет выглядеть следующим образом:
public partial class MyMigration : DbMigration { public override void Up() { CreateTable("GroupUser", c => new { UserId = c.Int(nullable: false), GroupId = c.Int(nullable: false), }) .PrimaryKey(t => new { t.UserId, t.GroupId }) .ForeignKey("User", t => t.UserId, cascadeDelete: true) .ForeignKey("Group", t => t.GroupId, cascadeDelete: true) .Index(t => t.UserId) .Index(t => t.GroupId); // ... } }
Здесь вы можете изменить два вызова метода
ForeignKey
для установки имени пользовательского ограничения перед вызовомupdate-database
:.ForeignKey("User", t => t.UserId, cascadeDelete: true, name: "FK_GroupUser_UserId") .ForeignKey("Group", t => t.GroupId, cascadeDelete: true, name: "FK_GroupUser_GroupId")
-
Второй вариант. Когда таблицы уже существуют, вы можете удалить ограничение и добавить новое переименованное в перенос:
public partial class MyMigration : DbMigration { public override void Up() { DropForeignKey("UserGroup", "UserId", "User"); DropForeignKey("UserGroup", "GroupId", "Group"); AddForeignKey("UserGroup", "UserId", "User", name: "FK_GroupUser_UserId"); AddForeignKey("UserGroup", "GroupId", "Group", name: "FK_GroupUser_GroupId") // ... } }