Tag: entity framework

在Entity FrameWork中获取新生成的ID(即scopeIdentity)

我在我的表中添加了一条记录,例如Orders 。 添加记录后,我想获取新生成的插入记录的ID。 和SQL中的SCOPEIDENTY一样。 但是我如何在entity framework中执行此操作。

EF 4.1:从集合中删除子对象不会删除它 – 为什么?

我有一些错误: EF 4:从集合中删除子对象不会删除它 – 为什么? 当我从父母中删除孩子时,当我调用SaveChanges()时删除了孩子,它会给出以下错误消息: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 但是使用DbContext和EF 4.1,“context.DeleteObject(recipe)”不存在。 有什么建议吗? [编辑] public void UpdateWithAttributes(Model model, IEnumerable entities) { var modelOriginal = this.unitOfWork.Model.GetById(model.IModel); this.unitOfWork.Context.Entry(modelOriginal).CurrentValues.SetValues(model); UpdateEntityAttributeAssociations(modelOriginal, entities); this.unitOfWork.Commit(); } public void UpdateEntityAttributeAssociations(Model model, IEnumerable current) { unitOfWork.Context.Entry(model).Collection(m => m.Entities).Load(); ICollection original = model.Entities; // perhaps .ToList() necessary // delete if (original != null) { List […]

EF扩展方法:“只能从LINQ到实体调用此函数。”

我为EF实体做了一个扩展方法: public static IEnumerable WildcardSearch(this IEnumerable entity, string param, Func selector) { return entity.Where(l => SqlFunctions.PatIndex(param, selector(l)) > 0); } //exception: This function can only be invoked from LINQ to Entities. result = context.FOO.WildcardSearch(id, x => x.Id).ToList(); 如果我尝试使用它,我会得到上面的例外。 但是,如果我直接在我的集合上运行(我假设的)相同的代码,它就像预期的那样工作。 为什么我会得到exception,有没有办法解决这个问题? 类似的线程建议将类型更改为IQueryable ,但它似乎没有帮助。 //this works result = context.FOO.Where(x => SqlFunctions.PatIndex(id, x.Id) > 0).ToList();

entity framework在应该进行INNER JOIN(多个表)时生成LEFT OUTER JOIN

我有以下奇怪的行为: public class Result { [Key] public int Id { get; set; } public int RuleId { get; set; } public int UserId { get; set; } [ForeignKey(“RuleId”)] public virtual Rule Rule { get; set; } [ForeignKey(“UserId “)] public virtual User User { get; set; } } public class Rule { [Key] public int Id […]

EDMX .NET 4.5到4.0?

我们正在使用entity framework,当我们的项目设置为构建.NET 4.5时,我们创建了EDMX。 现在我们要切换到.NET 4.0,但是当我们这样做时,我们会收到EDMX文件的编译错误。 它声明了以下错误: Error 10027: The XML namespace for the conceptual model’s schema element is not supported on this project’s target framework version. 除了重新创建EDMX文件之外还有其他解决方案吗?

System.OutOfMemoryException – 当Entity Framework查询Varbinary类型的过大数据时

我正在尝试查询包含文件(1,2 Gb)的varbinary列。 我正在使用entity framework。 见下文: 要测试的数据库 CREATE TABLE [dbo].[BIGDATA] ( [id] [bigint] IDENTITY(1,1) NOT NULL, [BIGDATA] [varbinary](max) NULL, CONSTRAINT [PK_BIGDATA] PRIMARY KEY CLUSTERED ([id] ASC) ) ON [PRIMARY] 要测试的数据(任何1 Gb的文件) INSERT INTO [dbo].[BIGDATA]([BIGDATA]) VALUES ((SELECT BulkColumn FROM OPENROWSET(BULK N’C:\BigTest.txt’, SINGLE_BLOB) AS Document)) 控制器下载文件 public FileResult Download() { try { var context = new Models.ELOGTESTEEntities(); var […]

在我们的解决方案中将entity framework放在何处?

好的,我们有一个包含以下项目的解决方案: 商业逻辑 实体 数据访问 公用事业 unit testing 用户界面 它是一个非常大的企业级应用程序。 我的问题是,我们在哪里放置entity framework? 一方面,EF看起来像数据访问技术,应该进入DataAccess项目。 但另一方面,它会生成自己的实体,这些实体应放在我们已经很大的实体项目中。 哪个项目更适合entity framework? 是否有可能将实体与EF中的持久性逻辑分开?

entity framework在where子句中添加了额外的条件

我已经确定在执行以下表达式时: int aNum = 52; var myArtifacts = mydbcontext.artifacts.Where(a => a.ParentID == aNum ).ToList(); 在mysql上执行的查询是: SELECT `Extent1`.`ID`, `Extent1`.`ParentID` FROM `artifacts` AS `Extent1` WHERE ((`Extent1`.`ParentID` = 52) AND (52 IS NOT NULL)); 任何人都可以解释为什么添加这个最后的额外条件? AND(52不是空))

应该在Repository还是Service层中编写复杂的查询?

我计划将数据访问层迁移到使用存储库模式和工作单元。 我知道存储库将帮助我轻松地将持久性存储(数据库,集合等)和EF等技术更改为MongoDB。 所以我注意到了一些存储库实现的关键点,例如: 返回IEnumerable而不是IQueryable 存储库应仅对CRUD操作负责 存储库方法的返回类型应该是模型(实体) 仅实现聚合根的存储库 如果我在项目中的实现存储库中应用这些关键点,我完全忘记了如何处理与多个实体相关的复杂查询。 目前我已经拥有的是在BLL库上有很多服务类将直接联系到EF的DbContext和DbSet以及一些这样的validation: public IEnumerable GetProjectWithDetails() { // Validation // Logging // Can be any logic need to before query data. Dbcontext.Projects.Where(p => // multiple of conditions go here follow business rules // conditions will need to check another entities (task, phase, employee…) such as: // 1. project have […]

导入属性在插入后返回null

我已将我的应用程序从EF4迁移到EF5。 我使用以下代码与先前版本获取新添加项目的相关实体。 Student s = new Student(); s.Name = _name; s.ClassID = _cID; db.Students.Add(s); db.SaveChanges(); ClassRoom c = s.ClassRoom; 所以我曾经把特定的类实体带到c 。 但是现在s.ClassRoom返回null。 如何获得学生的ClassRoom实体? 我是否必须使用db.ClassRooms.FirstOrDefault(….) ?