Tag: entity framework

与Linq一起使用DbContext时执行AS

我正在设计一个多租户数据库,每个租户都有一个相应的数据库用户。 为用户分配与租户关联的架构的访问权限以及dbo架构中对象的特定权限。 一旦我确定了租户,我想通过执行如下所示的SQL语句切换到适当的用户上下文: EXECUTE AS User = ‘Tenant1’ WITH NO REVERT 当我使用DbContext的Database属性的ExecuteSqlCommand执行此命令时,一切似乎都正常工作。 当我稍后使用Linq更改模型并调用该方法时 myDbContext.SaveChanges(); 我得到一系列例外情况: 在提供程序连接上启动事务时发生错误。 有关详细信息,请参阅内部exception 内部例外: 当前命令发生严重错误。 结果(如果有的话)应该被丢弃。 是否有可能以这种方式更改用户的执行上下文,如果是这样,最好的方法是什么?

entity framework不生成ApplicationUser外键

注意:对于这个问题,我稍微简化了模型。 我正在使用ASP.NET Core MVC应用程序(使用Entity Framework Core)。 我有三个型号。 我有一个ApplicationUser(从IdentityUser扩展),我有一个Activity模型,我有一个’SignUp’模型,它有一个活动的外键和ApplicationUser的外键。 至少,这是个主意。 问题是,Entity Framework将Activity FK识别为FK,而不是applicationuser。 这只是数据库中的另一个int而没有任何FK约束。 我尝试了很多在互联网上发现的东西,但我无法让它发挥作用。 这就是我目前所拥有的(为了清晰起见而缩短): 活动: public class Activity { public Activity() { SignUps = new HashSet(); } public int ActivityID { get; set; } [Required] [StringLength(50)] [Display(Name = “Naam”)] public string Name { get; set; } public virtual ICollection SignUps { get; set; } […]

entity framework:“伪造”可查询的导航属性

我想在EF映射的类中“伪造”导航属性。 考虑一个例子,我有书(由“isbn”标识)和购买(由“isbn”标识) – 请注意,书籍和购买有意不直接相互映射。 现在我想为“Book”创建一个扩展方法,以一种可查询的格式返回书籍的所有购买内容 public class Book { public virtual string isbn { get; set; } public virtual string name { get; set; } // Pseudo-code .. does not work, throws an exception // “LINQ to Entities does not recognize the method […], and this method cannot // be translated into a store expression […]

使用ADO.NET Entity Framework批量插入和更新

我正在编写一个执行大量Feed处理的小应用程序。 我想使用LINQ EF,因为速度不是问题,它是一个单用户应用程序,最后,每个月只会使用一次。 我的问题围绕使用LINQ EF进行批量插入的最佳方式。 在解析传入的数据流之后,我最终得到了一个值列表。 由于最终用户可能最终尝试导入一些重复数据,我想在插入期间“清理”数据而不是读取所有记录,执行for循环,拒绝记录,然后最终导入余数。 这就是我目前正在做的事情: DateTime minDate = dataTransferObject.Min(c => c.DoorOpen); DateTime maxDate = dataTransferObject.Max(c => c.DoorOpen); using (LabUseEntities myEntities = new LabUseEntities()) { var recCheck = myEntities.ImportDoorAccess.Where(a => a.DoorOpen >= minDate && a.DoorOpen 0) { foreach (ImportDoorAccess ida in recCheck) { DoorAudit da = dataTransferObject.Where(a => a.DoorOpen == ida.DoorOpen && a.CardNumber […]

ASP.NET MVC:在程序集中找不到上下文类型

这是我的第一个asp.net mvc项目。 我使用EF代码第一种方法并创建了一个单独的类库来编写我的模型和上下文。 我还在mvc项目中引用了类库。 但是,当我尝试启用迁移时,在创建了更多新模型之后,它给了我一个错误。 我还尝试了这里提到的所有可能的解决方案: 在程序集中找不到上下文类型。 ASP.NET MVC4 问题仍然存在。 我错过了什么吗? 这是Context Class的代码: using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity.ModelConfiguration.Conventions; using FYPPharmAssistant.Domain.Models; namespace FYPPharmAssistant.Domain.DAL { public class MyContext : DbContext { public MyContext() : base(“MyConnectionString”) { } public DbSet GenericNames { get; set; } public DbSet Items { […]

使用IQueryable进行unit testing代码

我被要求为某些function编写一些unit testing,但坦率地说,我不太确定这个特定代码片段的需要或用处。 我总是试图质疑unit testing的必要性或有用性。 有问题的代码非常简单,并且可以使用很多。 基本上它是.Skip()和.Take()扩展方法的包装器。 在我看来,整个方法的合法性是值得怀疑的。 代码基本上是这样的: public IQueryable Page(IQueryable query, int page, int size) { if(query == null) throw new ArgumentNullException(“query”); if(page < 0) throw new ArgumentOutOfRangeException("page"); if(page < 0) throw new ArgumentOutOfRangeException("size"); return query.Skip(page * size).Take(size); } 当然,我可以对预期的exception进行unit testing,但还有什么呢? 很可能是我错过了这一点,所以这有什么用呢?

在Entity Framework中使用Linq执行动态查询

我有: string table_name = “Orders”; string column_name = “Name”; string identity_column = “OrderID” int identity_value = 5; 如何实现以下(动态): var result = (from order in db.Orders where order.OrderId== identity_value select order).SingleOrDefault(); 出于安全原因,我无法创建整个SQL查询,然后将其执行到服务器。

如何使用TryUpdateModel

我正在准备本教程 。 我从本教程中看到,对于更新,作者使用以下代码: …. var studentToUpdate = db.Students.Find(id); if (TryUpdateModel(studentToUpdate, “”, new string[] { “LastName”, “FirstMidName”, “EnrollmentDate” })) { try { db.Entry(studentToUpdate).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction(“Index”); } … } 但我不明白为什么需要以下行: db.Entry(studentToUpdate).State = EntityState.Modified; 当我删除这一行时,代码仍然运行良好,更新完美。 有人可以帮我解决这个问题吗? 如果是这样,为什么当我删除它时,更新运行良好。

使用ExecuteSqlCommand调用存储过程(期望未提供的参数)

我正在尝试使用context.Database.ExecuteSqlCommand从EF调用存储过程,因为我的一个参数是一个数据表。 以下是程序的参数: ALTER PROCEDURE [mySchema].[myProc] @customerId INT, @indicatorTypeId INT, @indicators [mySchema].[IndicatorList] READONLY, @startDate DATETIME, @endDate DATETIME 这是调用存储过程的c#代码: var indicatorsDt = new DataTable(); indicatorsDt.Columns.Add(“Date”, typeof(DateTime)); indicatorsDt.Columns.Add(“Ongoing”, typeof(int)); indicatorsDt.Columns.Add(“Success”, typeof(int)); indicatorsDt.Columns.Add(“Warning”, typeof(int)); indicatorsDt.Columns.Add(“Error”, typeof(int)); indicatorsDt.Columns.Add(“Other”, typeof(int)); var customerIdParam = new SqlParameter(“customerId”, SqlDbType.Int); customerIdParam.Value = customerId; var typeIdParam = new SqlParameter(“indicatorTypeId”, SqlDbType.Int); typeIdParam.Value = typeId; var startDateParam = […]

entity framework – 在ObjectContext处理时分离实体?

我在WinForms应用程序中使用EF,我的想法是每个事务都有一个ObjectContext,而不是一个长时间运行的上下文。 但是当我尝试将先前事务中的对象附加到新事务中时,我遇到了一个错误,这与已经存在于另一个上下文中的实体有关。 我有点假设当对象上下文被处理时实体被分离,是不是这种情况? (也许我不会在某处正确处理上下文)。 如果实体没有分离,有没有办法处理? 编辑 显然,实体在上下文处理后并没有被分离,正如@ F.Aquino所说,但做这样的事情似乎有效。 虽然我不确定这是否是处理实体的正确方法。 也许有人可以评论可能由此产生的问题: public void Attach(params EntityObject[] objects) { foreach (EntityObject obj in objects) { ((IEntityWithChangeTracker)obj).SetChangeTracker(null); entities.Attach(obj); } } 基本上,当我想将实体重新附加到上下文时,我只是将实体的更改跟踪器置空,然后将其附加到新上下文。 它似乎工作正常。