Tag: entity framework

永久禁用EF中的Configuration.ProxyCreationEnabled?

而不是必须在每个查询上执行以下操作,有没有办法只是全局设置该值? 模型视图中有一个延迟加载设置,但似乎没有ProxyCreation的设置。 using (var context = new LabEntities()) { **context.Configuration.ProxyCreationEnabled = false;** var Query = from s in context.EAssets .Include(“Server”).Include(“Type”).Include(“Type.Definition”) where (s.Type.Definition.b_IsScannable == true) && (s.Server.s_Domain == Environment.UserDomainName || s.Server.s_Domain == null) select s; var Entities = Query.ToList(); } 我并不完全理解这个选项的好处,但是我知道在visual studio中标记了所有带有乱码序列后缀的对象,并且使得调试器使用不合理。

entity framework:复合键的字段不能为空?

我有一个带有复合键的模型 – 行是关键: public class Item { [Key, Column(Order = 0)] public int UserId { get; set; } [Key, Column(Order = 1)] public DateTime? Date { get; set; } } 运行下面的代码会抛出exceptionDbEntityValidationException并带有消息: The Date field is required. : var it = new Item { Date = null, UserId = 2 }; m_Entities.Items.Add(it); m_Entities.SaveChanges(); // throws exception […]

尝试调用有效方法重载时出现奇怪的“程序集未引用”错误

我在Assembly A使用方法重载: public static int GetPersonId(EntityDataContext context, string name) { var id = from … in context… where … select …; return id.First(); } public static int GetPersonId(SqlConnection connection, string name) { using (var context = new EntityDataContext(connection, false)) { return GetPersonId(context, name); } } 当我尝试从Assembly B调用第二个重载时,VS会产生以下编译时错误: “System.Data.Entity.DbContext”类型在未引用的程序集中定义。 您必须添加对程序集’EntityFramework,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = …’的引用。 […]

该类型出现在单个LINQ to Entities查询中的两个结构不兼容的初始化中

我正在尝试构建像条件查询之类的东西来从底层数据库中获取所需的数据。 目前我有以下查询(工作正常) var eventData = dbContext.Event.Select(t => new { Address = true ? new AnonymousEventGetAddress { AddressLine1 = t.Address.AddressLine1, CityName = t.Address.AddressCityName } : new AnonymousEventGetAddress(), }); 如果我改成它 var includeAddress = true; // this will normally be passed as param var eventData = dbContext.Event.Select(t => new { Address = includeAddress ? new AnonymousEventGetAddress { AddressLine1 […]

DbContext已经处理完毕

我使用ASP.NET MVC 4和SQL Server 2008开发了一个Web应用程序,我创建了ContextManager类,在所有页面中只有一个数据库上下文。 public static class ContextManager { public static HotelContext Current { get { var key = “Hotel_” + HttpContext.Current.GetHashCode().ToString(“x”) + Thread.CurrentContext.ContextID.ToString(); var context = HttpContext.Current.Items[key] as HotelContext; if (context == null) { context = new HotelContext(); HttpContext.Current.Items[key] = context; } return context; } } } 它在大多数页面中都能正常工作,但是在注册页面出现了问题,我的上下文因以下错误而被废弃: 由于已经处理了DbContext,因此无法完成操作。 public ActionResult Register ( […]

如何在linq中包含()嵌套的子实体

我如何包括孩子的孩子? 即,乔布斯有引用具有QuoteItems var job = db.Jobs .Where(x => x.JobID == id) .Include(x => x.Quotes) .Include(x => x.Quotes.QuoteItems) // This doesn’t work .SingleOrDefault(); 只是为了更清楚 – 我正在尝试检索单个作业项目,并且它是关联的报价(一对多)和每个报价相关的QuoteItems(一个报价可以有许多QuoteItems) 我问的原因是因为在我的报价索引视图中,我试图通过SUMming小计显示每个报价的所有报价项目的总和,但是它出现为0.我正在调用这样的小计: @item.QuoteItem.Sum(p => p.Subtotal) 我相信我遇到这个问题的原因是我上面的Linq查询没有检索每个Quote的相关QuoteItems。

如何从Entity Framework / LINQ中的特定表中提取元组列表?

我需要从带有Entity Framework的C#.NET中的大表中提取一对’ID’/’Name’的列表。 我试试这个请求: List<Tuple> list = (from res in db.Resource select new Tuple(res.Resource_ID, res.Name)).ToList(); 但不幸的是我有这个错误: LINQ to Entities中仅支持无参数构造函数和初始值设定项。 我不知道如何用这个框架提取这个元组列表,我觉得这个错误有点丢失。 你能帮我理解和解决我的问题吗? 最好的祝福, 亚历克斯

EF Code First级联删除和更新?

我的实体是这些: public class Customer { public Customer() { Invoices = new List(); Payments = new List(); } public int ID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public IList Payments { get; set; } } public class Payment { public int ID { get; […]

如何在使用基于代码的迁移时停止添加迁移检查我的数据库没有挂起的迁移?

我正在研究使用基于代码的EF迁移来获取不使用EF的产品。 一切都运行良好,除了命令: Add-Migration MyTestMigration 输出以下消息: 无法生成显式迁移,因为以下显式迁移尚未处理:[201206260845338_DannyTest]。 在尝试生成新的显式迁移之前应用挂起的显式迁移。 原因是连接字符串在构建时是未知的,并且EF在。\ SQLExpress上随机创建了一个名为“MyContextName”的数据库。 我无法应用挂起的迁移,因为它引用了此数据库中不存在的数据库表 – 我们只是尝试使用迁移作为执行脚本的方式; 所以问题是: 如果我们没有使用自动迁移(我们有EnableAutomaticMigrations = false),为什么Add-Migration要求数据库是最新的, 即使它对生成的(空)迁移没有任何影响 ? 我发现很难相信MS在这么多用法的情况下不打算使用这个用例; 唯一“破碎”的东西是不影响任何行为的validation。 除了创建我们自己的Add-Migration命令之外还有什么方法可以复制EF的命令,但跳过(看似不必要的)DB最新检查? 我试过传递各种论点,但到目前为止还没有成功。 编辑: 我实际上找到了解决这个问题的更好方法,但它并不是这些问题的真正答案,所以在这里添加它。 希望有时间把它变成博客文章 ! 我想使用Add-Migration的唯一原因是因为DbMigration带来的所有guff; 但我意识到,通过基类,我们基本上可以通过让基类从属性自动生成迁移ID来消除所有这一切。 目标对于我们的所有迁移都是相同的,因为模型状态不会改变。 现在,我们只是手动创建这样的迁移(构建ID需要日期,以便EF以正确的顺序应用它们): [Migration(2012, 6, 27, 12, 00, “Add new xxx fields for yyy”)] internal class MyNewMigration : MyDbMigration { public override Up() { // … } public […]

为什么等待不会出现阻止EF上下文的第二次操作

在ASP.NET MVC应用程序中,我收到了一个使用我的Entity Framework上下文的控制器方法的以下错误消息。 在先前的异步操作完成之前,在该上下文上开始第二个操作。 使用’await’确保在此上下文上调用另一个方法之前已完成任何异步操作。 任何实例成员都不保证是线程安全的。 我知道你不能并行运行查询,所有东西似乎都在等待。 如果我调试程序并逐步检查从EF返回的一些数据,那么它可以工作,可能是因为这会强制查询完成。 编辑如果我在控制器方法的空检查中放置一个断点并检查shipmentDetail的数据,则不会抛出exception。 这是代码的一部分: 控制器方法 : [Route(“{id:int}/Deliveries”)] public async Task DeliveryInfo(int id) { var shipmentDetail = await db.ShipmentDetails.SingleOrDefaultAsync(s => s.Id == id); if (shipmentDetail == null) return HttpNotFound(string.Format(“No shipment detail found with id {0}”, id)); var model = await DeliveryInfoModel.CreateModel(db, shipmentDetail); return View(“DeliveryInfo”, model); } CreateModel方法 : public static […]