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 主从表设计的一些需要注意的内容的更多相关文章
- MySql数据表设计,索引优化,SQL优化,其他数据库
MySql数据表设计,索引优化,SQL优化,其他数据库 1.数据表设计 1.1数据类型 1.2避免空值 1.3text类型优化 2.索引优化 2.1索引分类 2.2索引优化 3.SQL优化 3.1分批 ...
- 数据库设计-Mysql数据库表设计的过程中几个关键点
一.表设计过程中应该注意的数据类型 1)更小的通常更好 控制字节长度 2)使用合适的数据类型: 如tinyint只占8个位,char(1024)与varchar(1024)的对比,char用于类似定长 ...
- MySQL库表设计小技巧
前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...
- MySQL分类表设计--根据ID删除全部子类
在做数据库分类表的时候,通常会有这样的设计:一个字段是ID,另一个字段PID,PID指向自己的上级分类: 这样的设计带来的问题是:我要删除一个类,我希望它的子类全部一起删除: 在不知道分类有多少层级的 ...
- 拎壶带你冲----教育类mysql用户表设计参考
说起用户表,大概是每个应用/网站立项动工(码农们)考虑的第一件事情.用户表结构的设计,算是整个后台架构的基石.如果基石不稳,待到后面需求跟进了发现不能应付,回过头来反复修改用户表,要大大小小作改动的地 ...
- mysql大表设计以及优化
MYSQL千万级数据量的优化方法积累https://m.toutiao.com/group/6583260372269007374/?iid=6583260372269007374 MySQL 千万级 ...
- 架构实战项目心得(十一):基于spring-security-oauth2的mysql数据表设计
一.建立数据库及数据表结构 CREATE SCHEMA IF NOT EXISTS `oauth2` DEFAULT CHARACTER SET utf8 ; USE `oauth2` ; -- -- ...
- 四 MySQL数据库表设计
一: 设计表: user: ID, PWD, name, type archiveRecord: referdate, archiveNum, owner, user, ...
- Mysql学习总结(17)——MySQL数据库表设计优化
1.选择优化的数据类型 MySQL支持很多种不同的数据类型,并且选择正确的数据类型对于获得高性能至关重要.不管选择何种类型,下面的简单原则都会有助于做出更好的选择: (1).更小通常更好 一般来说,要 ...
随机推荐
- linux网络配置命令(二)——ip
ip命令 查看/设置路由.设备.路由策略和渠道信息 格式 ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | addr ...
- 各种排序算法(java)
/** * 时间复杂度:O(n*n) * 简单选择排序法:每次从剩余元素中选择一个最小值,交换最小值与数组中相应位置上的数值 * n趟 * @param nums */ public static v ...
- DVWA-CSRF
Low等级 image 抓包 image 正常跳转 image image 在这里我们把密码改为qwer image image image image image ...
- 6月17 ThinkPHP连接数据库------数据的修改及删除
1.数据修改操作 save() 实现数据修改,返回受影响的记录条数 具体有两种方式实现数据修改,与添加类似(数组.AR方式) 1.数组方式 a) $goods = D(“Goods” ...
- 浅谈线程runnable和callable的使用及区别
线程使用比较广泛,但实际上一般项目很少用上线程,线程常用于优化复杂的程序执行流程,把一些与业务关系关系不大但是必须要执行的流程使用线程的方式让子线程去执行,主流程只返回跟业务有关的信息 runnabl ...
- python-flask-SQLAlchemy-Utils组件
SQLAlchemy-Utils,提供choice功能 定义: # pip3 install sqlalchemy-utils from sqlalchemy_utils import ChoiceT ...
- UI基础四:简单的assign block
经常会有需求让在标准的order加个assign block,那就来简单说一下: 1.创建assign block组件ZXXXXXX 2.添加BTORDER节点和GUID属性 3.创建表视图(可配置, ...
- SQL 查询语句
4.2 单表查询 4.2.1 列名(表名)的别名(as 可以不加) 给列名取别名既可以加 as 也可以不加. (2008 - Sage.lower(Sdept)等可计算但无列名,需要指定列名) 原列名 ...
- ActiveMQ使用例子
网上收集的例子:有broker,producer,consumer public class MqApp { public static void main(String[] args) throws ...
- Linux 下Qt实现守护进程实例(转)
原文地址:Linux守护进程的编程方法(含实例) 作者:lingdxuyan 参考文献 Linux信号列表(zz) Linux 守护进程的编程方法 linux上编写守护进程的例程 Linux下后台守 ...