mysql 主从表设计_EF Code First MySql 主从表设计的一些需要注意的内容

假如有下面两张表

public class Main

{

public int Id{get;set;}

public string Name{get;set};

public virtual ICollection 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 Mains{get;set;}

public DbSet 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 Details{get;set;}

将Details注销了,执行 update-database -force,你会发现数据库里该表还存在,用add-migration aa你会发现方法Up的内容是空的。

出现这种问题是因为主表里面 还有从表的引用,将

//public virtual ICollection Details{get;set;}

注视了就能删除Detail表了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值