如何在Entity Framework 6 Code First中将MySQL的On Delete Set Null设置为MySQL?

时间:2019-06-13 21:51:07

标签: c# mysql entity-framework ef-code-first

我正在尝试使用Entity Framework 6.2.0在.Net Framework 4.5.2中的MySQL服务器上构建数据库。为了与MySql连接,我使用8.0.16版本的nugets MySQL.Data,MySQL.EntityFramework和MySQL.Web。连接正常。

问题在于代码优先方法并在外键约束下生成行为。我想具有“删除时设置为空”的行为,但是无法在生成的数据库中获取它。我现在所拥有的只是“删除限制”或“级联”。这是MySQL,Connector,EF6的问题吗?

我尝试使用流利的api设置与此行为的关系。我读过fk约束为nullable的setting属性应该可以解决问题。我还通过添加.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连接器有问题,但是也许我可以尝试其他方法?

0 个答案:

没有答案