Tag: entity framework

使用Linq to Entities在一次操作中获取COUNT和SKIP TAKE

我在Linq to Entities供电数据访问层中进行了数据调用,该层旨在进行分页调用。 在这样做时,我需要选择数据的一个子集,比如50行,但也要获得所有匹配的计数,以了解要分页的总匹配数。 目前,我正在做以下事情: var queryResult = DatabaseContext.Table .Where(x => !x.IsDeleted) .Where(p => ( p.PropertyOne.ToLower().Contains(query) || p.PropertyTwo.ToLower().Contains(query) )); int count = queryResult.Count(); var returnData = queryResult .OrderBy(i => i.ID) .Skip(start).Take((length)) .Select(y => new ObjectDTO { PropertyOne = y.PropertyOne, PropertyTwo = y.PropertyTwo } .AsEnumerable(); 这导致两个昂贵的数据库操作。 由于某种原因, COUNT操作实际上需要比SELECT操作更长的时间。 有没有办法在同一个操作中获取计数和子集? 我的逻辑流程说我们做了以下事情: 看表 在表中查找与条件匹配的项目 获取所有比赛的计数 返回匹配的编号子集 这似乎可以在一次操作中,但我无法弄清楚如何。 尝试一,慢 […]

存储库中Database.SetInitializer (null)的用途是什么?

我正在使用entity framework,并在我的上下文中inheritance自DbContext。 public class MyContext : DbContext, IMyContext { static MyContext() { Database.SetInitializer(null); } //other stuff } 这条线的目的是什么? Database.SetInitializer(null)

当我尝试保存新记录或更新现有记录时,EF将0000-0000-0000-xxx作为Guid返回?

我在我的C#项目中使用EF4。 我遇到的问题是,当我尝试保存记录时,我收到主键违规,PK值为“0000-0000-0000-xxx”。 根据我的猜测,EF无法识别IsIdentity标志并生成guid值。 在我的表的SQL Server数据库中,我指定了一个PK(uniqueidentifier> guid)并将其设置为IdentityColumn,因此我希望这可以直接进入我的项目,因为在SQL Server中生成了guid。 有没有办法克服这个错误?

RIA服务不归还包含类型的收集财产

我有一个WCF RIA Services应用程序和一个UserRole类型的模型,其中包含UserPermission对象的集合。 我在域服务中使用.Include(“UserPermission”),当我调试它时,我确认它在返回之前肯定包含UserPermission类型。 当我调试Silverlight 3客户端时,它返回UserRoles,但UserPermission属性都是空的。 这些是显示在服务上具有UserPermissions的UserRoles。 由于服务和客户端上的一切看起来都是正确的,我专注于元数据类,但仍然找不到任何错误。 [MetadataTypeAttribute(typeof(UserRole.UserRoleMetadata))] public partial class UserRole { internal sealed class UserRoleMetadata { public int RoleID; public string Name; [Include] [Association(“UserPermissions”, “RoleID”, “PermissionID”)] public EntityCollection UserPermissions; } } 这是域服务方法: public IEnumerable GetUserRoles() { IEnumerable roles = this.ObjectContext.UserRole.Include(“UserPermissions”); return roles; // In debug, roles.First().UserPermissions.Count = 2 here // For now, […]

什么时候需要dispose()的规则是什么?

虽然我已经编写了一段时间,但我真的只是进入了我所谓的中级编码器。 所以我理解dispose()的原理,即释放为变量和/或资源保留的内存。 我也发现有时使用EF我必须dispose()以便其他操作正常工作。 我不明白的只是需要发布的内容,何时使用dispose()。 例如,我们不处理像字符串,整数或布尔值这样的变量。 但是在某个地方我们越过“一条线”,我们使用的变量和/或资源需要被处理掉。 我不明白这条线在哪里。 在知道何时使用dispose()时,是否有一个原则或几个广泛的原则适用? 我读了这些SOpost( 具体情况 , 更多关于如何而不是何时 )但我不觉得我理解何时使用dispose()的基础知识。 我看到一条评论询问当变量超出范围时是否释放内存,这引起了我的注意,因为直到我看到响应为否,它才会因为超出范围而被释放,我会想到当它超出范围时它会被释放。 我不想成为第二个链接中的一个人称为“无能的开发者”,虽然我认为这有点苛刻。 我们中的一些人还在学习。 所以这就是为什么我的问题是“什么时候确定需要处置?”? 我的问题不再那么多, 何时 。 当然评论如何有用,但即使调用dispose()的方法是一个Using语句,我仍然需要知道何时。 编辑原始问题:我知道这是一个很长的解释, 标记为重复的评论笔记请求,这不是一个咆哮,我只是不知道如何确保我把焦点放在我的精确问题上。 很多时候,我们只是匆匆走过我们问的方式。 正如我在这篇长篇文章的最后提到的那样,在我们专注于我的问题之后,我将编辑所有这些,假设我们到达那里。 根据我所读到的内容,我认为这是一个重要的问题。 提议的“答案”post是一篇很棒的post,但并没有真正回答我的问题。 CodeNotFound下面的评论也提供了一个很好的链接,但它也没有真正回答我的问题。 我提供了有关这些post的评论,试图帮助完善我的确切问题: 我什么时候应该在.NET中处理我的对象? :第一个答案以评论开头 一次性对象表示持有CLR本质上不知道的有价值资源的对象。 不幸的是,我不明白“ 一次性对象…… CLR本质上没有意识到 ”这一术语包括在内。 这就是我的要求。 我怎么知道某件事是否属于我必须处理的范畴? 我们一直在代码中定义要使用的东西。 我们什么时候越线,它成为我需要处置的对象()? 顺便说一句,我注意到那篇文章的作者从未标出答案。 我不知道这是否意味着他不觉得这个问题得到了回答,或者他的跟进是否很差,但我希望我能够提炼一点我希望了解的内容。 当你仔细研究答案时,他们并没有真正解决哪些对象需要开发人员处理它们的问题,或者我如何知道如何识别哪些对象。 我只是不知道我创建的对象或事物需要我负责处理。 而且我认为GC和其他条款发挥作用,但同样,这就是如何 。 显而易见的是,大多数经验丰富的专业开发人员都知道他们创建的东西何时需要被处理掉。 我不明白怎么知道。 正确使用IDisposable界面 :显然是一个流行的答案(1681 upvotes),但明确的答案开始于 Dispose的目的是释放非托管资源“。 好的,但我的问题是如何通过查看它是非托管资源的东西来了解? 我不明白下面的注释如何适用于需要处理的内容。 如果你在.NET框架中找到它,那么它就是托管的 […]

SQLite 1.0.94没有出现在EDM提供商上

我注意到这也是1.0.93的问题,但它似乎也适用于1.0.94。 进一步来说: Machine运行Windows 8.1 x64,Visual Studio 2013 从官方SQLite网站安装sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0 创建一个C#.NET 4.5.1控制台项目 添加NuGet SQLite x86 / x64 在我的项目中添加“ADO.NET实体数据模型” 从数据库中选择EF Designer SQLite未列在数据源提供程序下。 相反,如果我在服务器资源管理器下添加连接,则会出现SQLite提供程序。 但这还不够,因为我需要使用Entity Framework 6.1.1。 如果有人有解决方案,请分享。 谢谢。

刷新存储过程中的数据

我有ac#entity framework应用程序。 我试图从代码运行存储过程(没有问题)。 它长时间运行,大约30分钟。 当进程通过时,我将每个事务的日志写入SQL表。 我希望从应用程序启动该过程,但随后显示登录屏幕的最后10条记录可能每10秒重新查询一次。 这将显示进展。 private void Window_Loaded_1(object sender, RoutedEventArgs e) { Task.Run(() => _serviceProduct.RefreshAllAsync()); _cvsLog = (CollectionViewSource)(FindResource(“cvsLog”)); var dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromSeconds(10); dispatcherTimer.Start(); } private void dispatcherTimer_Tick(object sender, EventArgs e) { _cvsLog.Source = _serviceProduct.GetRefreshLog(); } 我已经改变了代码以简化。 线程在dispatcherTime_Tick进程上阻塞。 看起来存储过程很好。 这是被叫服务。 public ObservableCollection GetRefreshLog() { using (var […]

无法在SQLite的Connection String中提供密码

我使用SQLite和Entity Framework。 我使用以下代码创建数据库: class MyContext : DbContext { // DbSets, OnModelCreating(), etc. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(“Data Source=c:\\test.db”); } } //this is in my test method using (var db = new MyContext()) { db.Database.EnsureCreated(); } 上面的代码有效。 数据库被创建。 但我想通过在连接字符串中提供密码来加密数据库: optionsBuilder.UseSqlite(“Data Source=c:\\test.db;Password=mypassword”); 在这种情况下,在EnsureCreated之后,我会遇到exception System.Data.dll中发生类型为“System.ArgumentException”的未处理exception附加信息:不支持关键字:’password’。 使用密码有什么问题? 如何加密SQLite数据库?

如何在C#中的存储库中设置一些实体属性?

我有一个数据库,其所有实体都有一些用于创建/修改/删除的日志字段,我必须在我的所有CRUD操作中获取当前用户ID并设置这些字段以用于安全目的…. 这是我的实体的一个例子: //log properties public byte RecordStatus { get; set; } public string RecordStatusDescription { get; set; } public string CreatedBy { get; set; } public DateTime CreatedDateTime { get; set; } public string CreatorIPAddress { get; set; } public string ModifiedBy { get; set; } public DateTime ModifiedDateTime { get; set; } public string […]

LINQ Join查询(表之间有可为空的ref)

我有3张桌子。 例如客户 , 公司和地址 。 客户已获得公司的支持。 公司有2个可空的地址(账单和运输),因此在某些情况下可能不存在地址。 我需要make join查询,但是如果Company.BillingAddress或Company.ShippingAddress等于null ,我不会获得所有数据)。 我试过了(但这是错误的查询): var res = (from client in context.Clients join clientCompany in context.Companies on client.ClientCompanyId equals clientCompany.Id into clientCompanyJoin from company in clientCompanyJoin join addressBilling in context.Addresses on company.BillingAddressId equals addressBilling.Id join addressShipping in context.Addresses on company.ShippingAddressId equals addressShipping.Id select new { Client = client, Company […]