持续更新:

一  属性重命名

数据库:UserName

Model:

[Column("UserName")]
public string UserName222

二, 某表多个外键指向同一表的主键。

数据库 :

//主表
public partial class MainTable
{
public MainTable()
{
this.SubTable1 = new HashSet<SubTable>();
this.SubTable2 = new HashSet<SubTable>();
} [Key]
public int MainTableID { get; set; } [InverseProperty("MainTable1")]
public virtual ICollection<SubTable> SubTable1 { get; set; }
[InverseProperty("MainTable2")]
public virtual ICollection<SubTable> SubTable2 { get; set; } } //从表
public partial class SubTable
{
[Key]
public int SubTableID { get; set; }
public Nullable<int> MTID1 { get; set; }
public Nullable<int> MTID2 { get; set; } [ForeignKey("MTID1")]
public virtual MainTable MainTable1 { get; set; }
[ForeignKey("MTID2")]
public virtual MainTable MainTable2 { get; set; } }

三, 对于ef报错无法生成复杂sql的问题

很常见的是

在 LINQ to Entities 查询中无法构造实体或复杂类型

The entity or complex type 'Snd.EF.dttree' cannot be constructed in a LINQ to Entities query

var q=db.Users.ToList().select(x=>new xxx(){
id=x.id,
pwd=x.pwd,
company=db.Company.first(x.id)
}).ToList()

记得先.tolist,把数据放到内存中。而不是让ef去帮你生成一个嵌套的复杂sql。(貌似有时不先.tolist()可以,有时不可以。这个没深究)

四 Entity Framework 支持 DataTable

http://blog.csdn.net/hanjun0612/article/details/51026673

五 遇见ef修改时,报错:已经具有跟踪的目标。。。。

在查询时,使用AsNoTracking()

六,

错误 : 支持“Entities”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://Go.microsoft.com/fwlink/?LinkId=238269)

我出现这个错误的原因是,我对数据库进行了修改,而实体层没有修改。当我采用code first更新的时候,就报错了。

解决方法:

到数据库,点开系统表,找到  __MigrationHistory  删除即可

七, 数据更新了,但是ef更新后,字段没出现的问题。

删除ef,重新创建即可。但是由于重新创建,导致之前的添加的许多notmapped属性或者标签都会没有。所以要谨慎!!!一般我还是推荐 code first。这样不容易改坏。

八, 添加不映射的字段

使用NotMapped属性,简单理解就是扩展了实体层。但是并不参与数据库的交互。

public partial class Model
{ [Key]
public int ID { get; set; } [NotMapped]
public bool isChecked { get; set; } [ForeignKey("ListID")]
public virtual SubModel Sub { get; set; }
}

九, ef上下文 dbcontext使用 using

不建议使用如下代码

//这样容易造成资源已释放的错误!
using (DBContext db = new DBContext())
{
var q=db.User.ToList();
} //我们应该直接
DBContext db = new DBContext()

十, ef复杂实体 无法序列化成 json的问题。

使用 newtonsoft 序列化 带有外键的实体层时,很容易报错(类似于死循环的一个错误)。

错误的本身很简单,是说你的关联对象有一个 foreignkey,所以他去序列化关联对象了。结果在关联对象里,又发现了你的主键对象(主外键关系,一定在2个类中会存在的)。结果又回到主键对象反序列化,结果又发现了外键对象。如此反复。所以报错了。

解决方法比较简单:在属性上增加 [JsonIgnore] 属性。不过这也会导致从此以后,他再也不会  被序列化  以及  反序列化

public partial class Model
{ [Key]
public int ID { get; set; } [JsonIgnore]
public virtual SubModel Sub { get; set; }
}

十一, The remote certificate is invalid according to the validation procedure

数据库连接字符串,增加以下    MultipleActiveResultSets=true;

    <add name="Test" connectionString="server=.;database=Test;uid=sa;pwd=sasa;Enlist=true;Pooling=true;Max Pool Size = 300; Min Pool Size=0; Connection Lifetime = 300;packet size=1000;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
<add name="Test1" connectionString="Data Source=.;Initial Catalog=Test;User id=sa;Password=sasa;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />

十二, 列名  "xxx.xxID"不存在

1 可能数据库不存在这个列

解决:增加数据库字段

2 newtonsoft.json的问题,不要使用9.00以上版本,存在bug(楼主自己遇见过,不吹不黑,换成6.0.0版本就好了,巨坑!!!)

解决:通过nuget 卸载所有newtonsoft.json。然后删除所有类库下的packages.config,最后手动添加6.0.0版本引用

十三,Error getting value from 。。。  System.Data.Entity.DynamicProxies。。。。。。

在创建 DBContext时 ,设置

_nContext.Configuration.ProxyCreationEnabled = false; 

十四, EF 不指定 数据库链接

那么数据库文件会生成在:App_Data 中。

请详细看一下问题,在试试如下方法

数据库不存在时重新创建数据库:

Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>());

每次启动应用程序时创建数据库:

Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>());

模型更改时重新创建数据库:

Database.SetInitializer<testContext>(new DropCreateDatabaseIfModelChanges<testContext>());

从不创建数据库:

Database.SetInitializer<testContext>(null);

十五 , 表名复数问题

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
}

十六,列名 Discriminator 无效

详见:https://blog.csdn.net/hanjun0612/article/details/80077425

十七,列名 XXXID 无效

在查询对象以及关联对象时。出现的这个问题。

解决方案:

1 数据库可能没有关联id

2 如果你是这么创建对象的话

在关联对象上,指定ForeignKey(指向属性名)
public partial class WD_MyProject
{
[Key]
public int id { get; set; }
public int uid { get; set; } [ForeignKey("uid")]
public virtual WD_Employee WD_Employee { get; set; } }

可以尝试反过来:

在属性上,指定ForeignKey(关联对象名)
public partial class WD_MyProject
{
[Key]
public int id { get; set; }
[ForeignKey("WD_Employee")]
public int uid { get; set; } public virtual WD_Employee WD_Employee { get; set; } }

PS :

这两种方法都是正确的(ForeignKey中的参数指向不同)。但是我在项目中就是遇到了使用第二种才能正常运行的情况。

msdn上是这么说的:

ef 问题汇总的更多相关文章

  1. Entity Framework入门教程(1)---Entity Framework简介

    什么是Entity Framework 学习EF的前提:熟练使用Linq和Ado.net,因为在使用EF框架进行开发时,我们大多数情况使用Linq进行查询和操作,而EF的底层实现用的是Ado.net. ...

  2. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  3. EF 4.1 学习资源汇总

    微软发布了EF 4.1以后,结合asp.net mvc3,网站的开发可谓是非常方便.但是作为一种新技术,如何开始你的学习之路呢? 首先是关于 EF 4.1的安装和介绍,以及nuget的使用. http ...

  4. EF(Linq)框架使用过程中的小技巧汇总

    这篇博客总结本人在实际项目中遇到的一些关于EF或者Linq的问题,作为以后复习的笔记或者供后来人参考(遇到问题便更新). 目录 技巧1: DbFunctions.TruncateTime()的使用 技 ...

  5. bug汇总 (EF,Mvc,Wcf)

    此博客用于在开发过程总bug及其解决方案的记录. 1. 异常信息:  ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象 ...

  6. EF(Linq)框架使用过程中的小技巧汇总 dbfunctions

    这篇博客总结本人在实际项目中遇到的一些关于EF或者Linq的问题,作为以后复习的笔记或者供后来人参考(遇到问题便更新). 目录 技巧1: DbFunctions.TruncateTime()的使用 技 ...

  7. EF 汇总函数使用注意事项Max()/Min()等

    一.字符串类型最大值 1.字符串类型的最大值,和数据库的字典排序最后一个相同,如果存在返回null //字符串最大值,是字典排序最后一个 string max1 = _context.students ...

  8. EF增删查改加执行存储过程和sql语句,多种方法汇总

    ActionUrl c = new ActionUrl() { ActionName="test", RequestUrl="/123/123", SubTim ...

  9. 自学MVC看这里——全网最全ASP.NET MVC 教程汇总

    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从 ...

随机推荐

  1. 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

    由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个"段友"的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不 ...

  2. Luogu3877 TJOI2010 打扫房间 二分图、网络流

    传送门 真是菜死了模板题都不会-- 首先\(30 \times 30\)并不能插头DP,但是范围仍然很小所以考虑网络流. 注意每个点都要包含在一个回路中,那么每一个点的度数都必须为\(2\),也就是说 ...

  3. React-使用redux-immutable统一数据格式

    在header的reducer.js里把header变成immutable对象之后,在组件里获取focused属性就得这样获取: focused:state.header.get('focused') ...

  4. R语言学习 第十篇:包

    包(Package)是实现特定功能的.预先写好的代码库(library),通俗地说,包是含有函数.数据等的功能模块.R拥有大量的软件包,许多包都是由某一领域的专家编写的,但并不是所有的包都有很高的质量 ...

  5. rrd文件及rrd文件与实际数据的对比研究。

    一,什么是rrd文件? 所 谓的“Round Robin” 其实是一种存储数据的方式,使用固定大小的空间来存储数据,并有一个指针指向最新的数据的位置.我们可以把用于存储数据的数据库的空间看成一个圆,上 ...

  6. linux-shell-引用-命令替换-命令退出状态-逻辑操作符

    命令替换:bash7步扩展的之一 嵌套  这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...

  7. Python-复习-文件操作-21

    # 文件处理 # 打开文件 #open('路径','打开方式','指定编码方式') # 打开方式 r w a r+ w+ a+ b #r+ 打开文件直接写 和读完再写 # 编码方式 —— utf-8 ...

  8. hots团队项目终审报告

    一.团队成员: 徐钧鸿: 1994年1月19日生人,摩羯座最后一天.所以有摩羯的强迫症和水瓶古怪的性格 暂且算队长吧…… 高中的时候因为兴趣学了竞赛,于是就入坑了,于是就来北航学计算机了 兴趣面很广, ...

  9. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

  10. 第三个Sprint冲刺第七天(燃尽图)