Tag: entity framework 5

entity framework连接字符串定义

我只是想知道, entity framework连接字符串究竟是什么意思? 喜欢: metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=”data source=testSource;initial catalog=CatalogName;user id=sa;password=***********;multipleactiveresultsets=True;application name=EntityFramework” 我知道provider = System.Data.SqlClient; provider connection string =“data source = testSource; initial catalog = CatalogName; user id = sa; password = ** 任何人都可以告诉我字符串metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;是什么metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl; 意思? 而且,还有一件事我需要确认,如果我想在实体连接字符串中编辑,我能做到吗?

比较Entity Framework 5中Any()与Count()的生成查询的性能

在我的项目中,我使用Entity Framework 4.4.0.0,我遇到了以下两难困境。 我必须检查用户是否被激活。 我的查询看起来像: 任何() _context.Users.Any(u => u.Id == userId && u.IsActivated); 生成的sql是: SELECT CASE WHEN ( EXISTS (SELECT 1 AS [C1] FROM [dbo].[Users] AS [Extent1] WHERE ( [Extent1].[Id] = @p__linq__0 ) AND ( [Extent1].[IsActivated] = 1 )) ) THEN cast(1 AS BIT) WHEN ( NOT EXISTS (SELECT 1 AS [C1] FROM [dbo].[Users] AS […]

如何阻止dbentityentry.currentvalues.setvalues尝试更改entitykey值

我使用以下代码使用从我的代码收集的新信息更新实体对象。 我正在使用Entity Framework 5 。 我使用以下扩展方法(作为我以前在EF4中使用的重新附加代码的替代方法): public static void ApplyValues(this object currentObject, object sourceObject, System.Data.Entity.DbContext obj) { obj.Entry(currentObject).CurrentValues.SetValues(sourceObject); } 问题是,当调用此方法时, SetValues方法尝试修改附加对象上的EntityKey值(显然我不希望它这样做),因此它会抛出错误。 我想这里有两个问题: 有没有办法阻止它尝试更新键值? 如果不是如何复制过去在EF4中正常工作的ObjectContext.ApplyCurrentValues()代码? —- —-更新 我之前用于EF4的代码如下: public static System.Data.Objects.DataClasses.EntityObject ReAttach(this System.Data.Objects.ObjectContext obj, System.Data.Objects.DataClasses.EntityObject objectDetached) { if (objectDetached.EntityKey != null) { object original = null; if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original)) { objectDetached = obj.ApplyCurrentValues(objectDetached.EntityKey.EntitySetName, objectDetached); return […]

附加和更新boolean或int并不总是有效

使用Entity Framework 5,给定一个存在于数据库中的对象messenger , published了比特属性,在以前版本的EF中,我会像这样更新它: using (var c = new EFContext()) { Data.Messenger cm = new Messenger { MessageId = messageId }; c.Messengers.Attach(cm); cm.Published = newPublishedValue; c.SaveChanges(); } 但是,如果newPublishedValue为true ,则使用EF5,但如果newPublishedValue为false ,则不对数据库进行任何更改。 同样,此模式不会将整数值设置为0。 这里发生了什么? 更换 c.Messengers.Attach(cm); 同 c.Entry(cm).State = System.Data.EntityState.Modified; 修复了这个问题,但是如果EF5不会更新我的new Data.Messenger属性的默认结构值,那么这不会使Attach方法有点无用吗? 我在这里想念的是什么?

查询即将到来的生日

我想询问我的客户,他们的生日还未到来。 我已经尝试过这个查询,当然 – 它已经失败了: Addresses.Where(adr => adr.DateOfBirth != null && adr.DateOfBirth.Value > DateTime.Now).Take(15).ToList(); 当然这不能正常工作(如果你将来出生的话),我想知道如何在没有一年的情况下查询我的Nullable ?

使用多对多关系entity framework强制内部联接

我在我的数据库中设置了多对多关系,如下所示: User ——- Id (PK, Identity) First Last …various other fields Skill ——- Id (PK, Identity) Description UserSkill ———– UserId (PK, FK on User.Id) SkillId (PK, FK On Skill.Id) 当我在DbContext上运行此LINQ查询时: from u in Users from s in u.Skills where s.Id == 5 select new { u.Id, s.Description }) 生成的SQL包含所有内部联接,这是我想要的: SELECT [Extent1].[UserId] AS [UserId], [Extent2].[Description] AS […]

EntityFramework Code首先自引用一对一(1:1)关系映射 – 无法确定主要结束

我有这堂课: public class Message { public long Id { get; set; } public string Subject { get; set; } public string Message { get; set; } public virtual Message ParentMessage { get; set; } public virtual Message ChildMessage { get; set; } //… } 使用EntityFramework Code First Add-Migration为我提供了以下消息: Unable to determine the principal end of […]

无法将值NULL插入“Discriminator”AspNetUsers表列中

代码首次迁移后,使用该寄存器添加用户将失败: 无法将值NULL插入“Discriminator”列,表’aspnet-BSF2013-20130918101120.dbo.AspNetUsers’; 列不允许空值。 创建用户代码是项目模板生成的默认代码(Vs2013,带有EF5的MVC项目) 在成功迁移之前,注册代码有效,因此我猜测会员资格已被EF更改。

entity frameworkexception:找到不明确的匹配

我收到错误: 找到了模糊的比赛 在此代码上添加.Add var db = new NexusEntities(); db.Reports.Add(mmr); 如果有两个具有相同名称但位于不同名称空间的类,则从谷歌搜索似乎是一个问题。 据我所知,情况并非如此……是否还有其他原因导致此错误发生? 或者有没有办法告诉它找到哪两个参数?

实体的IQueryable .Where(属性在本地数组中)

所以我知道iQueryables被翻译成SQL语句,因此无法处理你可能放入where子句的所有可能的方法。 但这就是我要做的事情: int[] alreadySelectedIds = … var subjects = Entities.NewInstance.Subjects.Where(x => Array.IndexOf(alreadySelectedIds, x.Id) == -1).ToList(); 阅读下面的post,我很高兴EF5应该能够翻译这个。 获取其键匹配id列表(或数组)的实体 使用LINQ从数组查询Int ID 但是,我收到此错误: LINQ to Entities无法识别方法’Int32 IndexOf [Int32](Int32 [],Int32)’方法,并且此方法无法转换为存储表达式。 谷歌搜索这个错误并没有给我太多帮助。 我也试过了 var newSubjects = Entities.NewInstance.Subjects.Where(x => alreadySelectedIds.Contains(x.Id)).ToList(); 无法创建类型为“System.Int32 []”的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 和 List alreadySelectedIds = … 无法创建类型为’System.Collections.Generic.List`1’的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 我被困住了,我的大脑变得糊涂,超出了任何类型的优雅康复的可能性。 有人可以救我吗?