Tag: entity framework

EF的DbContext的单例范围

所以我目前正在使用一个使用Entity Framework的ASP.NET MVC Web应用程序,我也使用Ninject进行dependency injection。 所以基本上,目前,这是我用Ninject注册我的DbContext和服务的方式。 kernel.Bind().To().InSingletonScope(); kernel.Bind().To().InSingletonScope(); kernel.Bind().To().InSingletonScope(); kernel.Bind().To().InSingletonScope(); 我用InSingletonScope注册它们,这意味着它们只会被创建一次并在应用程序的整个生命周期中使用(至少我是如何理解的)。 控制器: private IAccountService _accountService; public MemberController(IAccountService accountService) { _accountService = accountService; } 但是,我深深感到这个单例范围会导致我的Web应用程序出现问题,特别是对于Entity Framework的上下文,因为它是单例。 我已经面临一个小问题,如果我使用SQL Management Studio手动更新数据库,我的Web应用程序的entity framework中的数据将不会更新,直到我重新启动应用程序(似乎是EF中的一些缓存机制)。 – 但是,如果我删除InSingletonScope ,我将从EF中随机获取错误,说: IEntityChangeTracker的多个实例不能引用实体对象 我理解为什么会发生这种情况,因为AccountService初始化的DbContext可能与RegionService不同。 但我不知道如何解决这个问题。 我对dependency injection的理解仍然非常有限,所以有人可以建议吗? – 编辑:我已经尝试过更换为InRequestScope以进行所有注射,但我仍然InRequestScope IEntityChangeTracker的多个实例不能引用实体对象 尝试从我的应用程序中的另一个服务插入具有相关对象(外键)的新实体时。 这意味着他们仍在使用不同的DbContext,发生了什么?! 最后编辑:好的我发现了问题,这是我的缓存机制缓存了以前的请求,导致所有后续请求的关系问题。

entity framework4.1两个具有相同属性名称的表

我在entity framework和SQL数据库方面遇到了一些问题。 所以我的问题是这样的:在我的数据库中有两个具有相同属性的表,它们在类型和长度上是相同的,但它们没有任何关联。 没有任何外键。 一旦我开始与数据库entity framework交互,就会吐出一个着名的错误: 错误0019:类型中的每个属性名称必须是唯一的。 属性名称已定义。 我顺便使用代码第一种方法。 这是表的类表示之一: [Table(“bo”)] public class TbPBO { [Required(AllowEmptyStrings = false, ErrorMessage = “O campo de nome nao pode ser nulo”)] [MaxLength(55, ErrorMessage = “O campo de nome nao pode ter mais que 55 caracteres”)] [Column(“nome”, TypeName = “char”, Order = 4)] public string TbBonome { get; set; […]

如何在Entity Framework中的同一查询中使用Include和Anonymous Type?

在如何计算使用Where In Entity Framework中的关联实体我得到此查询 但是当我访问queryResult [0] .post.Category或queryResult [0] .post.Tags时它总是空的,因为我没有使用Include。 包括不适用于Projection,正如微软在最后一项所述: http : //msdn.microsoft.com/en-us/library/bb896317.aspx var queryResult = (from post in posts join comment in comments.Where(x=> x.IsPublic) on post.Id equals comment.Post.Id into g select new { post, post.Author, post.Tags, post.Categories, Count = g.Count() }) 如何在同一个查询中获取Count,并包含与标签和类别的关系? 为什么EF关系修复不起作用?

entity framework6 – 该类型已配置为实体类型。 它不能重新配置为复杂类型

我有一个实体,我做了一个小改动。 我已经使外键不可空并且需要了。 当我来创建entity framework迁移时,我收到一个错误: “付款”类型已配置为实体类型。 它不能重新配置为复杂类型。 我不明白为什么会这样。 我没有将任何类定义为复杂类型。 我正在使用Enum,但这一直存在并且从未成为过以前的问题并且在EF6下得到支持。 该项目本身仍然编制好。 这是导致问题的Payment类。 public partial class Payment { public int payment_ID { get; set; } public int order_ID { get; set; } public PaymentTypeEnum paymentType_ID { get; set; } public string cc_response_ReceiptNo { get; set; } public string cc_response_QSIResponseCode { get; set; } public string cc_response_QSIResponseDescription { […]

EF4 Code First CTP5:种子方法不再有效

我有EF Code First CTP4工作正常,我今天安装了CTP5。 现在,我重新填充数据库时出现exception。 这是我的模型: public class Member { public Member() { DateCreated = DateTime.Now; DateUpdated = DateTime.Now; DateLastLogin = DateTime.Now; } [Key, DatabaseGenerated(DatabaseGenerationOption.Identity)] \\I have tried removing these annotations and the result is the same public int MemberId { get; set; } [Required,RegularExpression(“.+\\@.+\\..+”, ErrorMessage = “Please enter a valid email address”)] public string […]

Linq到实体扩展方法内部查询(EF6)

有人可以向我解释为什么EF引擎在以下情况下失败了吗? 它可以使用以下表达式正常工作: var data = context.Programs .Select(d => new MyDataDto { ProgramId = d.ProgramId, ProgramName = d.ProgramName, ClientId = d.ClientId, Protocols = d.Protocols.Where(p => p.UserProtocols.Any(u => u.UserId == userId)) .Count(pr => pr.Programs.Any(pg => pg.ProgramId == d.ProgramId)) }) .ToList(); 但是,如果我将一些封装到扩展方法中: public static IQueryable ForUser(this IQueryable protocols, int userId) { return protocols.Where(p => p.UserProtocols.Any(u => u.UserId == […]

entity framework集合已被修改; 枚举操作可能无法执行

我有一个问题,错误集合的解决方案被修改,枚举操作可能无法执行。 当“作者”和“z”表示相同的元素时,就会发生这种情况。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; namespace ConsoleApplication1 { public class Nation { public int ID { get; set; } public int name { get; set; } public virtual ICollection NationAllys { get; set; } } public class NationAlly { public int ID { get; set; } public int […]

entity framework:更新影响对象

我遇到了EF Update方法的问题。 我有一个包含多个信息和其他复杂对象的对象例如当我调试我的object.otherObject包含数据时。 然后我用以下行更新它: _dbContext.Update(object); 问题是在更新调用之后,我的object.otherObject失去了它的值并变为null。 当尝试使用不同的操作(用户界面操作)和相同的对象(不同的值)时,我不会遇到这个问题。 根据我对EF更新的理解,它应该将对象标记为已修改但保持完整。 编辑: 我的映射文件是: internal class ObjectConfiguration: EntityTypeConfiguration { public ObjectConfiguration() { ToTable(“TABLE_NAME”, Properties.Settings.Default.DBSchema); HasKey(s => s.Id); Property(s => s.Id).HasColumnName(“COLUMNNAME”); } } 编辑2: _dbContext是根据EF 5存储库和工作单元格构建的自定义对象: https://docs.microsoft.com/fr-fr/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-的工作图案,在安-ASP净MVC应用程序 像这样: public class UserManager : IDisposable { private readonly IRepository _dbContext; } public interface IRepository { TEntity Update(TEntity entity) where TEntity : class; […]

EF向后兼容的数据库迁移

我正在尝试使用EF代码优先和迁移来弄清楚如何实现以下部署方案。 我的想法是,我想用向后兼容的架构更改升级数据库(例如:添加一列)并测试一切仍然有效。 它的灵感来自绿色/蓝色部署,但并不完全遵循这种模式。 这背后的原因是遵循这个过程: 升级数据库(EF迁移) 测试网站 更新网站代码 如果出现问题,请恢复到之前的网站代码 我肯定会面临的问题是,在第2步(和第4步),我肯定会从EF获得有关模型被更改的错误,尽管所有数据库更改都与现有代码兼容… 我知道解决方案是将数据库“向下”迁移到以前的版本(甚至进行数据库备份),但可能会发生某些迁移非常复杂且“向下”部分可能被破坏或编码很差的情况。 所以我的问题是: 有没有办法避免EF检查模型或最终意识到更改是向后兼容的?

entity framework5.0。 我的查询有什么问题?

这是我的代码: public DateTime GibSomeStartDate(IEnumerable partnerNumbers, DateTime startTime) { var contractsStartDate = from contract in this.databaseContext.Contract where partnerNumbers.Contains(contract.Pnr) && contract.SomeDateTime >= startTime select contract.SomeDateTime; } 如果我调用contractsStartDate.Min() ,则会发生exception: Unable to create a null constant value of type ‘System.Collections.Generic.IEnumerable`1’. Only entity types, enumeration types or primitive types are supported in this context. 我的查询有什么问题? contractsStartDate的类型为System.Data.Entity.Infrastructure.DbQuery EF 5.0 databaseContext是System.Data.Entity.DbContext子代