EF Code First MySql 主从表设计的一些需要注意的内容
Posted 毛毛虫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF Code First MySql 主从表设计的一些需要注意的内容相关的知识,希望对你有一定的参考价值。
假如有下面两张表
public class Main
{
public int Id{get;set;}
public string Name{get;set};
public virtual ICollection<Detail> Details{get;set;}
}
public class Detail
{
public int Id{get;set;}
public int MainId{get;set;}
public string Desc{get;set;}
[ForeignKey("MainId")]
public virtual Main Main{get;set;}
}
public DbSet<Main> Mains{get;set;}
public DbSet<Detail> Details{get;set;}
然后在程序包管理器控制台输入:update-database,在mysql数据库很顺利的生成了两张表。
一、更新时报告 ,Table ‘{Database}.dbo.{TableName}‘ doesn‘t exist
这时候你发现需要增加级联删除和更新的功能,OK,修改Detail,将
public int MainId{get;set;}
改为
[Required]
public int MainId{get;set;}
然后在程序包管理器控制台输入:update-database -force
发现诸如此类的错误:Table ‘{Database}.dbo.Details‘ doesn‘t exist
问题出在dbo,解决方案是:
add-migration -aa
将生成一个诸如 201710031324203_aa.cs的文件,里面有一个Up的方法,将dbo.删除,然后执行update-database -force就能搞定。
可能的原因是:ef 处理sqlserver时表描述为:DatabaseName.dbo.TableName是正确的,而mysql是不能有dbo的(DatabaseName.TableName),所以出错了。
二、删除不了从表
//public DbSet<Detail> Details{get;set;}
将Details注销了,执行 update-database -force,你会发现数据库里该表还存在,用add-migration aa你会发现方法Up的内容是空的。
出现这种问题是因为主表里面 还有从表的引用,将
//public virtual ICollection<Detail> Details{get;set;}
注视了就能删除Detail表了。
以上是关于EF Code First MySql 主从表设计的一些需要注意的内容的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 EF Code First Fluient API 从主表配置多个外键引用到同一个表