Как установить On Delete Set Null в Entity Framework 6 Code First для MySQL? - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь построить базу данных на сервере MySQL в .Net Framework 4.5.2, используя Entity Framework 6.2.0. Для связи с MySql я использую nugets MySQL.Data, MySQL.EntityFramework, MySQL.Web все в версии 8.0.16. Связь работает нормально.

Проблема заключается в подходе, основанном на первом коде, и генерации поведения для ограничений внешнего ключа. Я хочу иметь поведение при удалении Set Null, но просто не могу получить его в сгенерированной базе данных. Все, что у меня есть сейчас, это On Delete Restrict или Cascade. Это проблема с MySQL, Connector, EF6?

Я пытался установить связь с этим поведением с помощью свободного API. Я читал, что установка свойства с ограничением fk, равным nullable, должна сработать. Я также отключил при удалении каскад, добавив .WillCascadeOnDelete(false).

Вот две сущности, которые я хочу связать с простым отношением Один-ко-многим:

public class Company
{
    public long Id { get; set; }
    public string Name { get; set; }
    public long? AddressId { get; set; }
    public virtual Address Address { get; set; }
}

public class Address
{
    public long Id { get; set; }
    public string Street { get; set; }
    public string Number { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }

    public virtual ICollection<Company> Company { get; set; }
}

И DbContext:

[DbConfigurationType(typeof(MySqlEFConfiguration))]
class OwrContext : DbContext
{
    public OwrContext() : base(nameof(OwrContext))
    {
        DbConfiguration.SetConfiguration(new MySqlEFConfiguration());
    }
    public virtual DbSet<Address> Address { get; set; }
    public virtual DbSet<Company> Company { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Company>()
            .HasOptional(c => c.Address)
            .WithMany(a => a.Company)
            .HasForeignKey(c=>c.AddressId)
            .WillCascadeOnDelete(false);
    }
}

Мне кажется, что есть проблема с коннектором MySQL, но, возможно, я могу попробовать что-то еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...