Code First 重复外键
原因:在一个表中,我有如下字段
表名:orderInfo
列名:companySend,companyReceiver
先展示表结构,(手打了,见谅)
public class OrderInfo
{
public int id{ get; set; }
public string Name { get; set; }
public Nullable<int> companyId1{ get; set; }
public Nullable<int> companyId2{ get; set; }
[ForeignKey("companyId1")]
public CompanyInfo company1{ get; set; }
[ForeignKey("companyId2")]
public CompanyInfo company2{ get; set; }
}
public class CompanyInfo
{
public int id{ get; set; }
public string Name { get; set; }
public List<OrderInfo> order1 { get; set; }
public List<OrderInfo> order2 { get; set; }
}
这里我们看见,对于order,我存在了两个关联company的字段。
如果进入codefirst,那么实际会出现问题。
大致是,对于companyid会出现4个字段,companyid1,companyid2,companyInfoid1,companyInfoid2
怎么解决这个问题呢?
我们先明白,出现这个问题,主要是order虽然申明了foreignkey和字段名称。但是系统不知道应该对应 order1还是order 2
解决这个问题,我们只需要这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//增加映射关系
modelBuilder.Entity<Order>()
.HasRequired(a => a.company1)
.WithMany(u2 => u2.order1)
.HasForeignKey(a => a.companyId1)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Order>()
.HasRequired(a => a.company2)
.WithMany(u2 => u2.order2)
.HasForeignKey(a => a.companyId2)
.WillCascadeOnDelete(false);
}
Code First 重复外键的更多相关文章
- Code First 重复外键(简单方法)
之前有说过 Code First 重复外键 的一种解决方案. http://blog.csdn.net/hanjun0612/article/details/50478134 虽然可以解决问 ...
- Entity Framework Code First主外键关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- Entity Framework 4.1 - Code First 指定外键名称
Entity Framework 4.1 中,生成外键的方式有以下几种: 1-指定导航属性,会自动生成外键,命名规则为:“表名_主键名”2-默认情况下与导航属性的主键名称相同的字段会自动被标记为外键, ...
- Code First 指定外键名称
指定类外键有注释(DataAnnotation)和FluentAPI两种方式, 目前掌握的知识我们先把DataAnnotation可用的四种方式总结如下 第一种方法: //1-指定导航属性,会自动生成 ...
- code first 添加外键时,与原有的数据冲突ALTER TABLE 语句与 FOREIGN KEY 约束"FK_XXXXX"冲突
问题的原因是新增的外键字段没有默认值,造成的,有很多方法可以解决,我这里通过修改生成的迁移文件,设定为可空,或者设置默认值即可.具体看情况使用.
- EntityFramework Code First 构建外键关系,数据库不生成外键约束
创建 ExtendedSqlGenerator类 public class ExtendedSqlGenerator : SqlServerMigrationSqlGenerator { #regio ...
- MySQL基础9-主键约束、外键约束、等值连接查询、一对一和多对多关系
1.主键约束和外键约束 外键约束 * 外键必须是另一表的主键的值(外键要引用主键!) * 外键可以重复 * 外键可以为空 * 一张表中可以有多个外键! 概念模型在数据库中成为表 数据库表中的多对一关系 ...
- EF Code First 主键对应多个外键
这是一位朋友提出的疑问,EF 映射主键可以对应多个外键吗?如果外键设置级联删除会发生什么情况?下面做一个测试,示例实体代码: public class Blog { public Blog() { P ...
- Code First 中使用 ForeignKey指定外键时总是显示未引用
Code First 中使用 ForeignKey指定外键时总是显示未引用 原因是:开发环境是在.NET 4.0 修改项目,改为.net 4.5
随机推荐
- docker数据卷管理及网络基础配置
数据卷 数据卷容器 数据卷迁移数据 端口映射 容器间通信 数据卷的管理 当需要查看容器内应用产生的数据或者把容器内数据备份及多个容器数据共享.有两种方式,数据卷以及数据卷容器. 数据卷 数据卷是一个可 ...
- java Switch中的case后面加上大括号({})和不加大括号的区别
java基础求真之switch 的case 后面加上大括号和不加大括号的区别. 下面给出三段代码大家看一下有什么不同以及哪段代码能够编译通过那段代码编译不能通过,为什么?(Why?) 代码片段一: i ...
- python中的 sql语句用法
函数中应用sql语句def _get_cust_number(self,cr,uid,ids,field_name,args,context=None): res={} for order in se ...
- npm install报错 npm ERR! enoent ENOENT: no such file or directory
在npm之后出现如下错误: $ npm install npm WARN checkPermissions Missing write access to /Users/lucas/code/js/v ...
- C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...
- C#大型电商项目优化(三)——扩展性与支付
上一篇文章引来不少非议,笔者并非对EF有看法,而是针对不同的业务场景和框架背景,挑选不同的方案.每个方案都有其优势劣势,挑选最快速,最简单的方案,是笔者的初衷. 看评论也是学习的过程,然而有些只做评价 ...
- Zabbix监控系统部署:配置详解
1. 全局配置 ListenPort ,监听端口 ,取值范围为1024-32767,默认端口10051 SourceIP,外发连接源地址 LogType,日志类型:单独日志文件,系统文件,控制台输出 ...
- Centos下分布式跟踪工具Pinpoint的完整部署记录
一.Pinpoint简单介绍Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统.分布式跟踪系统.一般来说,前端向后台发起一个查询请求,后台服务可能 ...
- Docker inspect - format格式化输出 - 运维笔记
Docker --format 参数提供了基于 Go模板 的日志格式化输出辅助功能,并提供了一些内置的增强函数. 什么是模板?上图是大家熟悉的 MVC 框架(Model View Controller ...
- 总结and规划
不知不觉中又过去了一年,马上就要读研究生了,因此有必要对自己进行必要的总结,以及对自己有个良好的规划. 首先,描述自己当前的心情——对未来充满了恐惧和焦虑. 马上大学就要毕业了,回首经历的大学生涯,似 ...