EntityFramework

Entity Framework自增列为int型时,int的默认值0导致出错的解决办法

家住魔仙堡 提交于 2020-03-14 18:52:44
C#里,int的默认值是0, 如果EF里,设置了自增列,类型为int,会报错, ‍ ‍ 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'Table' 中的标识列插入显式值 ‍ ‍ ‍ ‍ 解决办法: ‍ ‍ 在Mapping里,修改映射: ‍ ‍ ‍ ‍ modelBuilder.Entity<Department>().Property(t => t.DepartmentID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); DatabaseGeneratedOption相关: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.schema.databasegeneratedoption(v=vs.110).aspx 来源: oschina 链接: https://my.oschina.net/u/101827/blog/282001

错误消息“无法加载一种或多种请求的类型。 检索LoaderExceptions属性以获取更多信息。

断了今生、忘了曾经 提交于 2020-03-12 19:50:03
我已经使用 Entity Framework ,SQL Server 2000,Visual Studio 2008和Enterprise Library开发了一个应用程序。 它在本地绝对可以正常工作,但是当我将项目部署到测试环境时,出现以下错误: 无法加载一种或多种请求的类型。 检索LoaderExceptions属性以获取更多信息 堆栈跟踪:位于System.Reflection.Module._GetTypesInternal(StackCrawlMark&stackMark) 在System.Reflection.Assembly.GetTypes() 在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly(LoadingContext上下文) 在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache(LoadingContext上下文)处 在System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache(组装程序集

使用Entity Framework保存对SQL Server数据库的更改时,一个或多个实体的验证失败

…衆ロ難τιáo~ 提交于 2020-03-08 18:46:09
我想保存我的编辑到数据库,我在ASP.NET MVC 3 / C#中使用实体框架代码优先,但我收到错误。 在我的Event类中,我有DateTime和TimeSpan数据类型,但在我的数据库中,我分别有日期和时间。 这可能是原因吗? 在保存对数据库的更改之前,如何在代码中转换为适当的数据类型。 public class Event { public int EventId { get; set; } public int CategoryId { get; set; } public int PlaceId { get; set; } public string Title { get; set; } public decimal Price { get; set; } public DateTime EventDate { get; set; } public TimeSpan StartTime { get; set; } public TimeSpan EndTime { get; set; } public string Description { get; set; } public string EventPlaceUrl { get; set; } public Category Category { get; set; } public Place Place {

EF、Dapper、NHibernate等ORM框架的比较及优缺点

荒凉一梦 提交于 2020-02-26 03:25:09
什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 ORM实现原理 对象到数据库的映射; 对象与数据库数据的互相转换; 重量级ORM, 以EntityFramework、NHibernate为代表 优点 面向对象方式访问数据库,摆脱SQL 可移植性强,支持所有流行的数据库 面向接口的设计,可扩充性强 对事务、缓存(一级缓存)有良好的封装及配置 缺点 比较复杂,学习曲线大; 处理对象关联很容易出错; 不适合统计查询系统; 对于多表连查,复杂的sql实现比较复杂,而且有可能需要借助其他方案; 自动生成的sql查询执行效率低; 对于大数据量、高负载场景需要慎重考虑; 实现良好的二级缓存很困难,并且只能定制; 轻量级ORM 以dapper为代表,并且是半自动的。也就是说实体类都要自己写,Dapper相当于Java里的Mybatis。 优点: 1、开源、轻量、小巧(单文件,代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.)、上手容易。支持poco及动态类型,缩写词:POCO's (plain old CLR objects)。

哪种方法效果更好:.Any()与.Count()> 0?

Deadly 提交于 2020-01-09 22:17:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在 System.Linq 命名空间中,我们现在可以将 IEnumerable 扩展为具有 Any() 和 Count() 扩展方法 。 最近,我被告知,如果我要检查一个集合包含在它里面1个或多个项目,我应该使用 .Any() 而不是扩展方法 .Count() > 0 扩展方法,因为 .Count() 扩展方法必须遍历所有项目。 其次,某些集合具有 Count 或 Length 属性 (不是扩展方法)。 它会更好利用这些,而不是 .Any() 或 .Count() 是/否? #1楼 注意: 当实体框架4实际存在时,我写了这个答案。 这个答案的要点是不要进入微不足道 .Any() VS .Count() 性能测试。 关键是要表明EF远非完美。 新版本的比较好...但如果你的代码的一部分这是缓慢的,它采用EF,测试直接TSQL和性能进行比较,而不是依赖于假设(即 .Any() 总是比快 .Count() > 0 ) 。 尽管我同意大多数投票赞成的答案和评论-特别是在 Any 点上, Any 信号 开发人员的意图 都比 Count() > 0 -但我遇到的情况是,在SQL Server上,Count的数量级更快(EntityFramework 4)。 这是带有 Any that thew timeout异常(约200

Entity Framework 动态构造select表达式

China☆狼群 提交于 2020-01-08 17:58:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 扩展ef自动映射需要查询的字段 比如我们需要返回某些字段会采用如下的写法 但是发现每次都去写select如果字段很多不想去一个一个查询出来,就想指定一个dto的类型 他就能查询dto里边的字段,然后自动映射到dto里边去就可以减少很多工作量了 我们把lambda表达式提到外面去 这种可以,但是下面这种构建一个dto_user怎么都不行要报错 找了很久把表达式变成func就可以了 或者调用表达式树的Compile方法生成func当然也是一样的 有了这个就可以通过类型+反射动态构建查询的字段了 测试的原型 测试成功!很高兴于是去封装了一个通用的扩展方法! 用法: 这样就会自动映射DTO_User了,写出来了还是很激动 但是很快就发现问题了,他居然是查询的全部!,然后那个查询需要字段的他居然是在内存中操作了, 每次都会查询全部字段出来 其实这个扩展方法实现了动态拷贝,可以作为解决这个问题的第二个步骤,把需要的字段查询出来后 在进行动态拷贝,平时进行对象转化的时候也可以直接用 然后测试发现select如果传表达式树他会去解析成sql,他会转换成需要查询的字段sql 从返回的IQueryable接口就知道,他是会生成的sql的,但是如果我们传递的是Func呢 返回的却是IEnumerable,当然是在内存中操作的了,

Entity Framework中的SqlException-不允许新事务,因为会话中正在运行其他线程

烂漫一生 提交于 2020-01-07 17:58:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我目前收到此错误: System.Data.SqlClient.SqlException:不允许新事务,因为会话中正在运行其他线程。 在运行此代码时: public class ProductManager : IProductManager { #region Declare Models private RivWorks.Model.Negotiation.RIV_Entities _dbRiv = RivWorks.Model.Stores.RivEntities(AppSettings.RivWorkEntities_connString); private RivWorks.Model.NegotiationAutos.RivFeedsEntities _dbFeed = RivWorks.Model.Stores.FeedEntities(AppSettings.FeedAutosEntities_connString); #endregion public IProduct GetProductById(Guid productId) { // Do a quick sync of the feeds... SyncFeeds(); ... // get a product... ...

如何查看由实体框架生成的SQL?

孤街浪徒 提交于 2020-01-07 01:06:34
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 如何查看实体框架生成的SQL? (在我的特殊情况下,我正在使用mysql提供程序-如果重要的话) #1楼 如果使用的是DbContext,则可以执行以下操作来获取SQL: var result = from i in myContext.appEntities select new Model { field = i.stuff, }; var sql = result.ToString(); #2楼 有两种方法: 要查看将要生成的SQL,只需调用 ToTraceString() 。 您可以将其添加到监视窗口中并设置断点,以查看任何LINQ查询在任何给定点的查询。 您可以将跟踪器附加到所选的SQL Server,这将向您显示最终查询的所有详细信息。 对于MySQL,跟踪查询的最简单方法是使用 tail -f 查询日志。 您可以在 官方文档中 了解有关MySQL的日志记录功能的更多信息。 对于SQL Server,最简单的方法是使用附带的SQL Server Profiler。 #3楼 您可以执行以下操作: IQueryable query = from x in appEntities where x.id = 32 select x; var sql = ((System.Data.Objects

代码优先与模型/数据库优先[关闭]

空扰寡人 提交于 2020-01-06 15:41:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用实体框架4.1代码优先于模型/数据库优先使用EDMX图表有什么优缺点? 我正在尝试完全理解使用EF 4.1构建数据访问层的所有方法。 我正在使用Repository模式和 IoC 。 我知道我可以使用代码优先方法:手动定义我的实体和上下文,并使用 ModelBuilder 来微调模式。 我还可以创建 EDMX 图并选择使用T4模板生成相同 POCO 类的代码生成步骤。 在这两种情况下,我最终都得到了与 ORM 无关的 POCO 对象和源自 DbContext 上下文。 数据库优先似乎最吸引人,因为我可以在企业管理器中设计数据库,快速同步模型并使用设计器对其进行微调。 那么这两种方法有什么区别? 是仅仅关于VS2010与企业管理器的偏好? #1楼 代码优先似乎是后起之秀。 我快速浏览了Ruby on Rails,它们的标准是代码优先,具有数据库迁移。 如果您正在构建MVC3应用程序,我相信Code首先具有以下优势: 简单的属性修饰 - 您可以使用验证,要求等属性来装饰字段,这对于EF建模来说非常尴尬 没有奇怪的建模错误 - EF建模通常会出现奇怪的错误,例如当您尝试重命名关联属性时,它需要匹配底层的元数据 - 非常不灵活。 合并并不尴尬 - 当使用像mercurial这样的代码版本控制工具时,合并

你为什么要使用表达 <Func<T> >而不是Func <T> ?

Deadly 提交于 2019-12-15 21:11:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我了解lambda和 Func 和 Action 代表。 但是表情让我难过。 在什么情况下,您将使用 Expression<Func<T>> 而不是普通的旧 Func<T> ? #1楼 我想添加一些关于 Func<T> 和 Expression<Func<T>> 之间的区别的注释: Func<T> 只是一个普通的老式MulticastDelegate; Expression<Func<T>> 以表达式树的形式表示lambda表达式; 表达式树可以通过lambda表达式语法或API语法构造; 表达式树可以编译为委托 Func<T> ; 从理论上讲,逆转换是可能的,但是这是一种反编译,因为它不是一个简单的过程,所以没有内置功能; 可以通过 ExpressionVisitor 观察/翻译/修改表达树; IEnumerable的扩展方法与 Func<T> ; IQueryable的扩展方法使用 Expression<Func<T>> 。 有一篇文章描述了代码示例的详细信息: LINQ:Func <T>与Expression <Func <T >> 。 希望对您有所帮助。 #2楼 主要原因是当您不想直接运行代码,而是想对其进行检查时。 这可能有多种原因: 将代码映射到其他环境(即,将C#代码映射到Entity