我正在尝试使用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连接器有问题,但是也许我可以尝试其他方法?