EF Code First MySql 主从表设计的一些需要注意的内容
2017-10-28 13:35
447 查看
假如有下面两张表
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表了。
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表了。
相关文章推荐
- Entity Framework Code First ---EF Power Tool MySql
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
- [EF]vs15+ef6+mysql code first方式
- MySQL下使用EF Code First指定表Engine无效时的解决办法
- EF4 Code First和EF6 Code First链接mysql的方法
- MySql For EF CodeFirst例子
- tcpcopy mysql功能由于细节比较多,需要处理的内容还有一些,版本只能拖后发布
- 针对Mysql 使用EF Code First时 TimeStamp/RowVersion 类型 的解决办法
- 电路系统设计制作过程和需要注意的一些问题
- MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
- 2014_03_27工作日志:windows编程需要注意的一些内容。
- Entity Framework Code First ---EF Power Tool 和MySql一起使用遇到的问题
- [EF]vs15+ef6+mysql code first方式
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
- MySQL优化的一些需要注意的地方
- 解决 Mysql下使用EF Code First 指定表Engine无效的思路
- 需要注意的一些Mysql语句
- mysql+EFCodeFirst
- EF Code first 和 DDD (领域驱动设计研究)系列一
- ado.net EF CodeOnly/CodeFirst设计模式实例演示