博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知其然不知其所以然的悲惨后果【EF CodeFirst 实体关系两日游】
阅读量:6579 次
发布时间:2019-06-24

本文共 1806 字,大约阅读时间需要 6 分钟。

先上测试代码

public class User     {
public int ID { get; set; } public int BillingAddressID { get; set; } public Address BillingAddress { get; set; } public IList
Shipments { get; set; } } public class Address {
public int ID { get; set; } public string Street { get; set; } public string City { get; set; } public string ZipCode { get; set; } } public class Shipment {
public int ID { get; set; } public string State { get; set; } public int DeliveryAddressID { get; set; } public Address DeliveryAddress { get; set; } public User ShipUser { get; set; } //[ForeignKey("ShipUser")] public int ShipUserID { get; set; } //public int UserId { get; set; } } public class TestContext : DbContext {
public DbSet
Users { get; set; } public DbSet
Addresses { get; set; } public DbSet
Shipments { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity
().HasRequired(u => u.ShipUser) .WithMany(d => d.Shipments) .HasForeignKey(c => c.ShipUserID) .WillCascadeOnDelete(false); } }

上面代码是能成功建库,并新增数据的最终版。

下面通过修改会报各种各样的错误

1、去掉OnModelCreating重载方法

  报错:

SqlException: Introducing FOREIGN KEY constraint 'FK_Shipments_Users_ShipUserID' on table 'Shipments' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.

 分析原因:EF创建的FK默认是带级联的

  

  因为SqlServer并不是真正运行去校验是否循环或多重级联,而是通过一个级联路径(可能与Name有关系)

  如果主键列不叫ID,也没有问题,但这样EF在建库时,会自动创建一列外键列(如ShipUser_UserID在代码中看不到)

转载于:https://www.cnblogs.com/wangcl/archive/2012/03/27/2419943.html

你可能感兴趣的文章
在JS中使用Ajax
查看>>
Jolt大奖获奖图书
查看>>
android中webview空间通过Img 标签显示sd卡中 的图片
查看>>
ubuntu 16.04 安装PhpMyAdmin
查看>>
安卓开启多个服务
查看>>
设置分录行按钮监听事件
查看>>
C Primer Plus 第5章 运算符、表达式和语句 5.2基本运算符
查看>>
java并发库之Executors常用的创建ExecutorService的几个方法说明
查看>>
23种设计模式(1):单例模式
查看>>
socket 编程入门教程(五)UDP原理:4、“有连接”的UDP
查看>>
Jquery获取iframe中的元素
查看>>
Laravel 学习笔记5.3之 Query Builder 源码解析(下)
查看>>
Struts2简单入门实例
查看>>
2012CSDN年度博客之星评选http://vote.blog.csdn.net/item/blogstar/xyz_lmn
查看>>
BZOJ 4037 [HAOI2015]数字串拆分 ——动态规划
查看>>
SpringBoot实战总汇--详解
查看>>
2018年7月1日笔记
查看>>
尝试使用iReport4.7(基于Ubuntu Desktop 12.04 LTS)
查看>>
动态规划:金矿模型
查看>>
子元素应该margin-top为何会影响父元素【转】
查看>>