Я пытаюсь построить базу данных на сервере 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, но, возможно, я могу попробовать что-то еще?