Tag: entity framework

entity framework查询的服务器端执行与存储过程相结合

是否可以从ObjectQuery调用StoredProcedure? 基本上我想动态构建一个查询并在服务器端执行它。 您可以将每个查询想象成搜索的一部分,您可以将不同的条件与“和”或“或”组合在一起。 对于像这样创建的ObjectQueries,它工作得很好。 var query1 = from a in objectContext.Articles where a.Name = ‘SOMETHING’ select new ResultType { ArticleId = a.ArticleId, Name = a.Name }; var query2 = from a in objectContext.Articles where a.Name = ‘SOMETHING ELSE’ select new ResultType { ArticleId = a.ArticleId, Name = a.Name }; query1 = query1.Intersect(query2); // or union […]

铸造/制图代表

我有一个方法 public List GetUsers(Func expression) { var users = new List(); using(UserContext context = new UserContext()) { // obviously an error users = context.Users.ToList(); } return users; } 注意DTO.User(一个DTO)和Domain.User(一个来自EF的域实体)所以我使用AutoMapper来映射像这样的实体 public List GetUsers() { var users = new List(); using(UserContext context = new UserContext()) { Mapper.CreateMap(); users = Mapper.Map<List,List>(context.Users.ToList()); } return users; } 好吧,这看起来不错但是..我希望GetUser方法接受委托表达式作为参数。 我在ui中有一个显示用户列表的网格,它有很多过滤选项,所以我希望我的UI只调用1方法而不是每个filter创建方法。 // […]

具有entity framework6的ObjectContext在现有相关实体上插入重复项

我正在创造这个以希望为一些人节省一些浪费的时间,或者在我的情况下为星期六。 问题如下: 我的主要实体在这个实例中称为case,在通过validation时,我会保存到对象上下文,就像这样 context.AddToCases(caseModel); context.SaveChanges(); 问题是案件发生了相关事件。 我正在添加一个名为事件的上下文感知项,我正在通过上下文查找 caseModel.Incident = context.Incidents.SingleOrDefault(i => i.IncidentNumber == jumpIncidentNumber); 随着代码运行,我可以看到model.Incident有一个EntityKey并且添加了状态,并且正在添加重复项。 不仅如此,保存后的结论参考是新创建的记录。 我以为我立刻知道了答案,我只需事先通过Attach运行事件模型 context.Attach(incident); caseModel.Incident = incident; 错误。 虽然它的EntityState没有变化,但它仍然是重复的。 除此之外,结果参考是原始事件,不再是重复。

EF6 CodeFirst一对多MySQL外键约束失败

我正在从现有数据库到CodeFirst进行映射,我遇到了一对多关系的问题。 System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误。 有关详细信息,请参阅内部exception —> System.Data.Entity。 Core.UpdateException:更新条目时发生错误。 有关详细信息,请参阅内部exception —> MySql.Data.MySqlClient.MySqlException:无法添加或更新子行:外键约束失败 我有一个像这样的T_USER实体。 public partial class T_USER{ public T_USER(){ this.T_OBJECTS = new HashSet (); this.T_OBJECTS1 = new HashSet (); } [Key] public int ID { get; set; } public string Name { get; set; } public virtual ICollection T_OBJECTS { get; set; } public virtual ICollection T_OBJECTS1 { […]

无法使用Asp.NET Core中的Entity Framework添加带有视图的Scaffold> MVC Controller

当我尝试使用内置生成器添加Controller时,我收到以下错误消息: 其中“Brand”是模型类,“ApplicationDbContext”是我的数据上下文类。 我从来没有像这样经历过这样的错误。 它不会一直发生(2次成功与30-40次尝试而不更改单行代码)。 我能够在几分钟之前为同一个类创建Controller,但是当你尝试添加新内容并尝试超过10次而没有结果时,它真的很烦人。 当然,我可以编写自己的控制器和视图,但我真的很喜欢使用附带的工具。 我已经使用“添加或删除”中的“修改”选项修复了VS. 我正在使用最新的Microsoft Visual Studio社区(MVSC2015 V14.0.25425.01 Update3)。 编辑: Brand.cs: namespace AppBrander.Models { public class Brand { public int ID { get; set; } public string Email { get; set; } public string BrandName { get; set; } public string CompanyName { get; set; } public string Description { get; set; […]

entity framework6.1 – SaveChanges因可选主体关系而失败

我有一个名为Employee的实体。 它有一个名为CreatedById的可空属性,它可以作为自身的引用。 它必须为null,因为第一个记录(可能是管理员)不会有创建者。 当初始化数据库时,我插入第一个Employee对象时会出现错误,我认为是因为我更新了与Fluent API的关系。 代码如下: Employee类: public class Employee : NullableInt32Entity, IUser { /// Omitted code that doesn’t matter } Employeeinheritance的NullableInt32Entity类: public class NullableInt32Entity : Entity, ICreatableEntity, IIndexableEntity { #region ICreatableEntity Members public int? CreatedById { get; set; } #endregion #region IIndexableEntity Members public int Id { get; set; } #endregion } 我认为EmployeeConfiguration类中的配置导致了问题: this.HasOptional( […]

存储库模式通用应用程序

几天前,当我开始学习使用Unity的Repository Pattern时,我觉得这种模式的主要好处是数据层与业务层的分离。 换句话说,如果需要改变方式,应用程序如何存储数据,这很容易,因为只有一个主模型负责通信。 这意味着,如果应用程序当前将数据保存到序列化的XML文件中,则将此逻辑更改为连接到数据库并不是非常困难。 我发现很少有很好的演示也使用了Unit Of Work层,这看起来非常方便。 让我向您展示一下我的代码。 public class UnitOfWork : IUnitOfWork { private readonly RepositoryContext _context; public IEmployeeRepository Employees { get; set; } public UnitOfWork(RepositoryContext context) { _context = context; Employees = new EmployeeRepository(_context); } public int Complete() { return _context.SaveChanges(); } public void Dispose() { _context.Dispose(); } } 主存储库上下文: public class RepositoryContext […]

为什么我不能删除只有.DeleteObject(o)的实体?

此代码有效: var c = cboCustomer.SelectedItem as Customer; var t = cboTrailer.SelectedItem as Trailer; using (var db = new CAPSContainer()) { db.Attach(c); db.Attach(t); c.Trailers.Remove(t); db.DeleteObject(t); db.SaveChanges(); } 但我不明白为什么我不能这样做: db.Attach(t); db.DeleteObject(t); db.SaveChanges(); 如果我尝试我得到: ‘CAPSContainer.Trailers’中的实体参与’CustomerTrailer’关系。 找到0个相关的“客户”。 1’客户’是预期的。 我首先使用EF 5.0模型,这里是edmx图的一部分: 我发现很难理解为什么,请帮忙。 更新1(如Boomer所建议): using (var db = new CAPSContainer()) { db.Attach(c); //db.Attach(t); //c.Trailers.Remove(t); db.DeleteObject(t); db.SaveChanges(); } 退货: 无法删除该对象,因为在ObjectStateManager中找不到该对象。

无法将扩展方法转换为存储表达式

我有一个扩展方法如下: public static bool SatisfiesSomeCondition(this Post post, SomeObj someObj) { return post.SomeObjId == someObj.SomeObjId; } 而我正试图像这样使用它: var query = ctx.Posts.Where(p => p.SatisfiesSomeCondition(someObj)).ToList(); 但我得到错误: LINQ to Entities无法识别方法’Boolean SatisfiesSomeCondition(xx.xx.xx.Post,xx.xx.xx.SomeObj)’方法,并且此方法无法转换为商店表达式。 如果我将查询更改为: var query = ctx.Posts.Where(p => p.SomeObjId == someObj.SomeObjId).ToList(); 这与方法相同。 它工作正常,并执行预期的T-SQL。 为什么我的第一个查询不起作用? 这是一个静态方法,不能弄清楚如何创建表达式树? (例如WHEREfilter)。 当然,我不必首先实现查询? (这意味着我不希望通过网络回来的记录,我在这里进行分页/排序,所以这不是一个选项)。 当然,我可以使用有效的方法(例如上面的内容),但方法SatisfiesSomeCondition是一种在域中使用的现有方法,我想重用该function,而不是重复它。 有任何想法吗?

使用EF进行批量插入

我需要使用C#和EF(使用.NET 3.5)在数据库中插入一些对象(大约400万个)。 添加对象的方法是: private DBModelContainer AddToContext(DBModelContainer db, tblMyTable item, int count) { db.AddTottblMyTable (item); if ((count % 10000== 0) || (count == this.toGenerate)) { try { db.SaveChanges(); } catch (Exception e) { Console.WriteLine(e.StackTrace); } } return db; } 如何从上下文对象中分离添加的对象(类型为tblMyTable)? 我不需要它们供以后使用,当添加超过300000个对象时,db save(db.SaveChanges())之间的执行时间会大大增加。 问候