Tag: entity framework 4

如何初始化我的entity framework查询以加快它们的速度?

我有一个登录页面,执行一个非常简单的EF查询来确定用户是否有效。 在第一次运行时,此查询大约需要6秒才能运行。 在后续运行中,它需要不到一秒钟。 我看过一篇讨论使用Application Auto-Start的文章,我的问题是这样的:有没有办法触发这个查询,导致任何缓存需要发生而不实际调用查询,或者我是否有必要用一组伪参数调用查询? 编辑:当我说六秒钟时,我指的是获取查询所需的时间。 代码看起来像这样(注意,在这种情况下,contactID是一个可以为null的int并设置为null): return from contact in _context.Contacts where contact.District == Environment.District && contact.ContactId == (contactID ?? contact.ContactId) select contact; 这是一个SqlServer 2008,我运行一个分析器来检查SQL,它返回的持续时间是41ms,最终执行的查询。 6或7秒延迟发生在查询甚至到达SQL之前。 我现在正试着设置一下,看看它是否可以给我更多关于同时可能发生的其他事情的细节。

entity framework4.1:覆盖IEnumerable validation

public abstract class Animal , IValidatableObject { public string Id {get;set;} public string Name {get;set;} public virtual IEnumerable Validate(ValidationContext validationContext) { if (this.Name == “animal”) { yield return new ValidationResult(“Invalid Name From base”, new[] { “Name” }); } } } public class Dog: Animal, IValidatableObject { public string Owner {get;set;} public override IEnumerable Validate(ValidationContext validationContext) […]

有没有办法在没有数据源的情况下创建LINQ查询作为变量?

前言: 我的核心问题与此非常相似: 如何在不将IQueryable暴露给我的应用程序的其余部分的情况下编写一个干净的存储库? 一直没有答案。 我希望如果我以不同的方式解决问题,并提出一个稍微不同的问题,我可能会得到一个结果。 我将重复这个问题的一些内容,以避免要求读者阅读上下文。 问题: 我正在使用POCO实体和entity framework4.我试图在应用层允许对实体集进行复杂的ad-hoc过滤,同时试图避免将IQueryable暴露在我的存储库边界之外。 这让我有些困难。 我不想在存储库上创建一个带有大量参数的大规模filter方法,例如: IEnumerable GetFilteredCustomers(string nameFilter, string addressFilter, bool isActive, int customerId, …) 这不仅非常麻烦,而且看起来非常难看,特别是如果它主要是一堆零点等等。它也不像我想的那样可维护。 我不想在存储库上创建大量的过滤方法,例如: IEnumerable GetActiveCustomers() IEnumerable GetCustomersByName() 这种方法存在许多问题,包括需要大量增加到n!的方法n! 其中n是可用过滤条件的数量,如果我希望能够以任意方式组合它们。 (即所有名为George的活跃客户)。 也很难维护。 我不想创建操纵IEnumerable可链接方法(Fluent Interface),因为最终需要从数据库中恢复一个巨大的结果集并将其过滤到内存中,这不是一个可扩展的解决方案。 我无法创建一个操作IQueryable的Fluent接口,因为正如我已经说过的,我不希望将IQueryable暴露在存储库之外。 我想避免简单地通过传入一个充满参数而不是大参数列表的对象来重复单个大规模过滤方法,尽管此时这可能是最难看的解决方案。 思路: 最终,我认为一个理想的解决方案是发现一些方法来创建一个不知道源的完整查询,并将其存储为参数。 然后,我可以将其传递到已知源的存储库中,并将查询应用于源并返回结果。 澄清; 与上面提到的简单地创建参数对象相比,我想使用原始LINQ查询,但以某种方式将它们存储在变量中,并稍后将它们应用于数据源。 我怀疑返回类型必须提前知道,但我完全可以定义并事先知道它。 要从另一个角度查看它,请考虑以下事项: IQueryable filteredCustomers = customerRepository.GetAll() .Where(c => c.FirstName == “Dave”) .Where(c => c.IsActive == […]

EF 4.1 Code First:类型中的每个属性名称在查找表关联上必须是唯一错误

这是我第一次尝试创建自己的EF模型,我发现自己试图使用Code First创建查找表关联,因此我可以访问: myProduct.Category.AltCategoryID 我已经设置模型和映射,因为我理解是正确的,但继续得到错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“CategoryID” 我的代码中表示了以下模型: [Table(“Product”, Schema=”mySchema”)] public class Product { [Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)] public int ProductID { get; set; } public int CategoryID { get; set; } public virtual Category Category { get; set; } } [Table(“Category”, Schema=”mySchema”)] public class Category { [Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None)] public int CategoryID { get; set; } public string Name […]

entity framework – 将字段值更新为当前数据库服务器时间

我从数据库中撤回了一个实体对象,我需要将日期更新到数据库服务器的日期/时间 – 通常你可以通过使用SQL getDate()函数来设置它。 如何在以下场景中完成此操作: var client = context.client.Where(c=>c.clientID == 1).FirstOrDefault(); // the value needs to be the value of the server’s current date, ie, getDate()… not DateTime.Now client.someDate = ; context.SaveChanges();

在EF 4.1中进行与LINQ的许多关系进行比较的最有效方法是什么?

在我的数据库中,我有以下表格: 人 岗位 InterestTag Person-InterestTag和Post-InterestTag之间存在许多关系 我需要在EF 4.1中执行linq查询以撤回包含至少一个与至少一个与给定用户相关的兴趣标签匹配的兴趣标签的任何post。 例 一个人有以下兴趣: 汽车 体育 身体素质 我需要退回任何与汽车,运动或健身相关的post。 在性能方面编写此查询的最有效方法是什么? 编辑 根据下面给出的答案遇到错误… 这编译得很好但在运行时抛出错误: var matchingPosts = posts.Where(post => post.Topics.Any(postTopic => person.Interests.Contains(postTopic))); 错误是: Unable to create a constant value of type ‘System.Collections.Generic.ICollection`1’. Only primitive types (‘such as Int32, String, and Guid’) are supported in this context. 任何想法如何解决这一问题? 编辑2 所以我的课程结构如下: public class Person […]

如何在entity framework中对列进行求和

我试图总结一个列,并明智地获取详细信息 我的表数据是 id membername cost 1 a 100 2 aa 100 3 a 100 4 aa 0 5 b 100 在entity framework中,我尝试对成本列求和并得到这样的结果 membername totalcost a 200 aa 100 b 100 然后我这样做 var result = from o in db.pruchasemasters.Where(d => d.memberid == d.membertable.id && d.entrydate >= thisMonthStart && d.entrydate s.price) }; 如何阅读结果并且我的代码是否合适?

为什么我的EF Code First预生成视图无效?

我的上下文中有~300个DbSet,并且app加载后的第一个查询(索引字段中的FirstOrDefault())大约需要40秒。 为了改善这一点,我试图在EF 4.3.1 Code First中使用预生成的视图,使用T4模板: Entity Framework Code First View Generation Templates On Visual Studio Code Gallery 我编译它,但我认为没有性能差异。 我希望/假设它会帮助我遇到的痛苦的慢启动,但没有运气。 它应该有帮助吗? 如果没有,那么预生成的视图究竟用于什么? 而且,我有什么办法可以改善启动时间吗? 至少可以说,分割我的上下文是痛苦的。

在entity framework中编辑对象并将其保存到ASP.NET MVC 2.0中的数据库中

所以我知道EF实体跟踪他们自己的更改并在调用savechanges时将它们保存到数据库中,但是这个场景呢…… 我有一个旨在编辑博客文章的页面。 它有两种动作方法。 [HttpGet] public ViewResult EditBlogPost(int Id) { //This action method gets the blog post by the id and returns the edit blog post page. BlogPost blogPost = db.BlogPosts.Where(x => x.Id == Id).FirstOrDefault(); if (blogPost == null) { ViewData[“message”] = “Blog post not found.”; return View(“Result”); } return View(“ManageBlogPost”, blogPost); } [HttpPost] public ViewResult […]

entity framework错误:具有null EntityKey值的对象无法附加到对象上下文

在我的应用程序中,我有以下代码…… public Boolean SaveUserInformation(UserInfoDTO UserInformation) { return dataManager.SaveUserInfo(new UserInfo() { UserInfoID = UserInformation.UserInfoID.HasValue ? UserInformation.UserInfoID.Value : 0, UserID = UserInformation.UserID, ProxyUsername = UserInformation.ProxyUsername, Email = UserInformation.Email, Status = UserInformation.Status }); } 此代码调用使用Entity Framework的dataManager对象上的方法… public Boolean SaveUserInfo(UserInfo userInfo) { try { //Validate data prior to database update if (userInfo.UserID == null) { throw new Exception(“UserInfoDomainModel object […]