Tag: entity framework

LINQ成员表达式获取列名

你好, 我正在使用LINQ和EF与C#4.0。 我已将基本的ELMAH表拖入EF(已构建并保存了很多次)。 一切都按照人们的预期运作。 但是试图过于雄心勃勃并且需要一点帮助 – 我试图从作为变量传入的表达式中获取Column名称。 我想要的是这个: 传入:x => x.ErrorId 得到:“ErrorId” public void GetColumnName(Expression<Func> property) { // The parameter passed in x=>x.Message // Message works fine (probably because its a simple string) using: string columnName = (property.Body as MemberExpression).Member.Name; // But if I attempt to use the Guid or the date field then it […]

如何通过迁移手动创建asp.net标识表?

我希望asp.net标识表存在于我的数据库中,并且在我实际运行mvc应用程序并创建用户之前生成相应的相应代码优先模型,以便我可以针对这些类编写一些逻辑在手之前。 有没有办法可以手动创建这些表/类与迁移?

在Entity Framework 6.1(非Core)中,如何使用IndexAttribute定义聚簇索引?

entity framework6.1(代码优先)增加了通过IndexAttribute添加索引的可能性。 该属性接受一个参数,用于指定索引应该是群集还是非群集。 同时,AFAIK,Entity Framework要求每个实体都有一个主键(使用KeyAttribute注释),并且该主键始终作为聚簇键创建。 因此,只要我使用IsClustered = true应用IndexAttribute ,就会出现错误,因为由于密钥,已经存在聚簇索引。 那么,如何使用IndexAttribute创建不是主键的聚簇索引? IsClustered属性IndexAttribute可用? (有关更多上下文:我正在映射一个仅用于通过LINQ查询进行读取的表。我不需要实际插入,更新或删除该表中的实体。因此,我不需要主键理想情况下,我想要一个没有主键的表,但是有一个非唯一的聚簇索引,专为阅读而优化。) 编辑(2014-04-11):另请参阅https://entityframework.codeplex.com/workitem/2212 。

entity framework包括性能

我一直在关注entity framework的性能,特别是关于使用Includes以及生成和执行各种查询所花费的时间。 我将详细介绍我所做的更改,但如果您认为任何这些假设是错误的,请纠正我。 首先,我们在数据库中有大约10,000个项目(不是很多),并且数据库显着标准化(这导致了大量的导航属性)。 目前的方法是延迟加载所有内容,并且假设请求一个项目可以假脱机数十个db请求,性能非常差,特别是对于较大的数据集。 (这是一个inheritance的项目,第一步是尝试在没有重大重组的情况下提高性能) 因此,我的第一步是获取查询结果,然后仅将导航属性的包含应用于这些结果。 我知道这在技术上执行了2个查询,但是如果我们存储了10,000个项目,但只想返回10个项目,那么仅在这10个项目中包含导航属性更有意义。 其次,在查询结果上使用多个包含且结果集大小非常大的情况下,仍然会遇到性能不佳的问题。 关于什么时候需要加载以及何时将延迟加载到位,我一直很务实。 我的下一个更改是批量加载查询包含,因此执行: query.Include(q => q.MyInclude).Load(); 这再一次显着提高了性能,虽然还有一些db调用(每批包含一个),它比大型查询更快,或者至少减少了entity framework尝试生成大型查询的开销。 所以代码现在看起来像这样: var query = ctx.Filters.Where(x => x.SessionId == id) .Join(ctx.Items, i => i.ItemId, fs => fs.Id, (f, fs) => fs); query .Include(x => x.ItemNav1) .Include(x => x.ItemNav2).Load(); query .Include(x => x.ItemNav3) .Include(x => x.ItemNav4).Load(); query .Include(x => x.ItemNav5) .Include(x […]

如何在ASP.NET标识中编辑用户

我是ASP.NET身份框架的新手,我正在尝试做一些事情。 我想要做的是编辑已注册的用户,然后将用户详细信息更新到数据库…以前,我使用entity framework,然后生成我的控制器视图并自行建模。 但我想更新我的用户详细信息并将用户列表添加到列表中.. 我该怎么做这些东西? 我见过角色方法..但我从来不明白,我该怎么办? 没有使用角色..因为我不需要管理员的目的。 只是,我想更新我的用户详细信息。

entity framework递归地包括来自包含集合的每个实体的集合

我有以下几点,我试图在这些国家的城市中包括人们的地址。 Country country = _db.Countries .Include(p=>p.Cities.People.????) .Where(….) 不确定如何工作?

阻止EF性能的SNIReadSyncOverAsync和WaitForSingleObject?

我正在对使用EF(System.Data.Entities)从sql DB读取的WCF服务进行一些分析。 当我启动多个并行服务器的客户端时,CPU都会达到100%,性能通常是坦克,一切都陷入困境。 在使用并发分析器进行分析时,我发现85%的时间花在同步上,只有大约4%是实际的代码执行。 深入研究堆栈跟踪,大多数同步似乎来自System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync中对WaitForSingleObject的调用。 堆栈显示调用转到本机方法包装器,然后在kernel32.dll!_WaitForSingleObject结束。 有谁之前经历过这个吗? 对此有什么办法吗? 我并没有真正抛出荒谬的负载,只有大约20个并行客户端,并且它都是只读的,所以我很惊讶线程甚至会费心去同步。 我已经和它斗争了一个星期了,我无法解释它。 任何帮助,将不胜感激!

如何将EF Code First DbContext绑定到Asp.Net DataSource?

我创建了以下Context以与Entity Framework Code First一起使用 : public class Context : DbContext { public DbSet Animals { get; set; } } 现在我想在Asp.Net应用程序中使用此Context来使用GridView执行CRUD操作。 我需要创建一个DataSource来进行数据绑定。 我该怎么办? ASP部分看起来像这样:

更新EF 6中的现有数据会引发exception – “…相同类型的实体已具有相同的主键值”。

我正在尝试使用Entity Framework 6更新记录,代码优先,没有流畅的映射或像Automapper这样的工具。 实体( Employee )具有与其相关联的其他复合属性,如Addreess (集合), Department 它也从一个名为User的基础inheritance而来 save方法如下, _dbContext是DbConext实现 public bool UpdateEmployee(Employee employee) { var entity = _dbContext.Employees.Where(c => c.Id == employee.Id).AsQueryable().FirstOrDefault(); if (entity == null) { _dbContext.Employees.Add(employee); } else { _dbContext.Entry(employee).State = EntityState.Modified; // 0; } 我一直收到错误: 附加类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。 如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。 这可能是因为某些实体是新的并且尚未收到数据库生成的键值。 在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。 我尝试过以下方法: 在设置为EntityState.Modified之前附加 在查询对象是否存在时添加AsNoTracking() (没有例外,但DB没有更新) – https://stackoverflow.com/a/23228001/919426 使用基本实体_dbContext.Users而不是Employee实体进行保存 – https://stackoverflow.com/a/25575634/919426 现在这些都不适合我。 对于那些不能在我的情况下工作的解决方案,我有什么问题?

entity framework – 无法加载指定的元数据资源

我意识到这已被问了很多次,但我似乎无法解决问题的根源。 我收到以下错误堆栈: 当我反映出我的dll时,我可以看到以下内容 阅读http://blogs.teamb.com/craigstuntz/2010/08/13/38628/它表明我希望在这里看到csdl,msl和ssdl文件,但它们不是。 它们确实存在于obj \ Debug \ edmxResourcesToEmbed中。 从来没有我试过通过这样做明确告诉web.config在哪里看: …connectionString=”metadata=res://DllName.dll/PaymentModel.csdl|res://DllName.dll/PaymentModel.ssdl|res://DllName.dll/PaymentModel.msl;provider=System.Data.SqlClient;provider … /> 这只是抛出一个错误,说它无法找到DLL: 无法解析程序集“DllName.dll”。 非常类似于这个未解决的SO问题无法解析程序集Model.dll 我尝试的最后一件事是将元数据行更改为: …connectionString=”metadata=res://*/;provider=System.Data.SqlClient;provider … /> 这引发了一条关于我不使用的sql ce的消息 – 有没有办法绕过这个? 还有什么我可以尝试的吗? 或者任何人都可以看到我哪里出错了? 一些额外的细节: 使用EF 6 EDMX设置为“嵌入式资源” 复制到输出目录:“不要复制” 元数据工件处理:“嵌入输出程序集” 最后在此 – 如果我将EDMX从Embedded Resource设置为EntityDeploy,那么这将在本地工作但不在构建服务器上构建,因为它会抛出与此SO问题完全相同的错误: 找不到要将其作为输入文件的资源嵌入的Conceptual Schema节点 但修复似乎没有帮助,遗憾的是我无法在服务器上安装.NET 4.5。