У меня было это:
public class Customer
{
public int Id {get; set;}
//some more properties
}
public class Payment
{
public int Id {get; set;}
public int CustomerId {get; set;} //foreign key
public Customer Customer {get; set;}
}
Что приводит к ограничению внешнего ключа в базе данных. Затем я сделал CustomerId обнуляемым:
public class Payment
{
public int Id {get; set;}
public int? CustomerId {get; set;} //foreign key
public Customer Customer {get; set;}
}
Если я генерирую скрипт миграции, я получаю что-то вроде этого:
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'MyMigration')
BEGIN
DECLARE @var2 sysname;
SELECT @var2 = [d].[name]
FROM [sys].[default_constraints] [d]
INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id]
AND [d].[parent_object_id] = [c].[object_id]
WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Payments]') AND [c].[name] = N'CustomerId');
IF @var2 IS NOT NULL EXEC(N'ALTER TABLE [Payments]
DROP CONSTRAINT [' + @var2 + '];');
ALTER TABLE [Payments] ALTER COLUMN [CustomerId] int NULL;
END;
GO
Так что теперь столбец Payments.CustomerId может иметь значение NULL, но ограничение внешнего ключа удалено. Как я могу вернуть ограничение внешнего ключа?
редактировать: еще одна вещь. Между изменениями моего кода я также добавил это в защищенное переопределение void OnModelCreating (ModelBuilder modelBuilder):
new PaymentMap(modelBuilder.Entity<Payment>());