• 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表了。

  • 相关阅读:
    JavaScript Design Patterns: Mediator
    Javascript模块化编程系列一: 模块化的驱动
    【329】word 替换文本高级用法
    【327】Python 中 PIL 实现图像缩放
    【326】PIL 截图及图片识别
    【325】python**:selenium
    Android iOS Dribbble风格边栏菜单实现
    Prof UIS相关
    浅谈工作中的几点小心得
    zookeeper与activemq最新存储replicatedLevelDB整合
  • 原文地址:https://www.cnblogs.com/catzhou/p/7746592.html
Copyright © 2020-2023  润新知