草庐IT

c# - EF 6 和 SQLite 1.0.96.0 的“未找到 Entity Framework 提供程序”

我意识到关于这个主题已经有几个类似的问题,但其中许多来自旧版本的SQLite,据我所知,它并不完全支持EF6。我已经尝试了来自这些线程的无数建议,但要么做错了什么,要么必须改变某些东西。我正在使用VS2013,目标为.NET4.5.1,并安装了来自system.data.sqlite.orgdownloadpage的sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe包。,以及来自NuGet管理器(安装EF6)的System.Data.SQLiteEF6包。下面是我当前的App.config文件(除了我尝试将Version、Culture

c# - EF 6.1 唯一可空索引

在使用CodeFirst的EF6.1中,您可以使用实体中的属性或按照以下方式使用流畅的API创建索引:Property(x=>x.PropertyName).IsOptional().HasMaxLength(450).HasColumnAnnotation("Index",newIndexAnnotation(newIndexAttribute("IX_IndexName"){IsUnique=true,}));有没有什么方法可以像在SQLServer中一样使用WHEREPropertyNameISNOTNULL脚手架(参见:https://stackoverflow.com/a/7

c# - 为什么 EF 生成带有不必要的空值检查的 SQL 查询?

我遇到了EF在搜索字符串字段时创建糟糕查询的问题。它以懒惰的程序员的风格生成了一个查询,以包含强制扫描整个索引的空检查。考虑以下查询。查询1varp1="x";varr1=ctx.Set().FirstOrDefault(subject=>p1.Equals(subject.StringField));查询2conststringp2="x";varr2=ctx.Set().FirstOrDefault(subject=>p2.Equals(subject.StringField));查询1产生WHERE(('x'=[Extent2].[StringField])OR(('x'ISNU

c# - 如何使用 ASP.net EF Codefirst 数据注释将 SQL Server 中的列设置为 varchar(max)?

我一直在网上搜索,试图找出正确的语法,让EntityFrameworkCodeFirst创建我的表,其中有一列:varchar(max)。这是我的。默认情况下,这会创建varchar(128)。如何创建varchar(max)?我试过[MaxLength]但没有成功。如有任何帮助,我们将不胜感激。谢谢![Column(TypeName="varchar")]publicstringMediaDesc{get;set;} 最佳答案 [Column(TypeName="varchar(MAX)")]令人惊讶的是,最明显的解决方案有效。[

c# - EF ICollection 与 List 与 IEnumerable 与 IQueryable

因此,我的EF模型具有关系,根据我在示例中看到的内容,这些关系应该使用ICollection的虚拟属性来完成。例子:publicclassTask{publicintId{get;set;}publicstringDescription{get;set;}publicvirtualICollection{get;set;}}我在某处读到我应该使用IEnumerable来防止延迟执行,对吗?这意味着如果我的DAL方法返回IEnumerable,仍然是IQueryable,SQL将在那个时刻执行,而不是在我在网页中调用.TOList的那一刻。那么,最佳做法是什么?我应该返回什么?IEnum

c# - DbSet 在 EF7 中没有 Find 方法

我正在尝试创建一个通用存储库来访问我的数据库。在EF6中,我能够这样做以获得特定实体:protectedIDbSetdbset;publicTGet(objectid){returnthis.dbset.Find(id);}EF7中的DbSet缺少Find方法。有没有办法实现上面这段代码? 最佳答案 这是一个非常粗糙、不完整且未经测试的.Find()实现作为扩展方法。如果不出意外,它应该能让您指明正确的方向。真正的实现由#797跟踪.staticTEntityFind(thisDbSetset,paramsobject[]keyVa

c# - EF 数据上下文 - 异步/等待和多线程

我经常使用async/await来确保ASP.NETMVCWebAPI线程不会被长时间运行的I/O和网络操作阻塞,特别是数据库调用。System.Data.Entity命名空间在这里提供了各种辅助扩展,例如FirstOrDefaultAsync、ContainsAsync、CountAsync等等。但是,由于数据上下文不是线程安全的,这意味着下面的代码是有问题的:vardbContext=newDbContext();varsomething=awaitdbContext.someEntities.FirstOrDefaultAsync(e=>e.Id==1);varmorething

c# - 如何在 EF 查询中执行日期比较?

请帮忙。我想弄清楚如何在linq查询中使用DATE或DATETIME进行比较。例子:如果我想要今天之前入职员工的所有员工姓名,我会在SQL中执行如下操作:SELECTEmployeeNameColumnFROMEmployeeTableWHEREStartDateColumn.Date但是linq呢?DateTimestartDT=//TodayvarEmployeeName=fromeindb.employeewheree.StartDateColumn上面的WHERE不起作用:ExceptionDetails:System.NotSupportedException:Thespec

c# - 用于更改列数据类型的 EF 迁移

我的项目中有一个模型如下:publicclassModel{publicintId{get;set;}publiclongFromNo{get;set;}publiclongToNo{get;set;}publicstringContent{get;set;}publiclongTicketNo{get;set;}}迁移如下publicoverridevoidDown(){AlterColumn("dbo.Received","FromNo",c=>c.Long(nullable:false));AlterColumn("dbo.Received","ToNo",c=>c.Long(n

c# - EF 迁移显示空的 Up() Down() 方法

我有一个本地数据库,目前是第二个版本,现在应该是第三个版本。之前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了什么。在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射。所以现在我以与之前那些类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令。不幸的是,我得到了一个空的迁移Up()和Down()方法。当我查看数据库时,有一个__migrationHistory可用于前2次迁移。如果我现在运行我的应用程序,还会添加第三次迁移,但显然不会创建新表,因为它不在Up()方法中。我做错了什么?我认为在构建之前的迁移时出现