我有一个MVC 3的Web应用程序,我正在使用entity framework的数据访问。 此外,我已经简单地使用了存储库模式,例如所有与产品相关的东西都在“ProductRepository”中处理,所有与User相关的东西都在“UserRepository”中处理。 因此,我使用UNITY容器来创build一个DataContext的单例实例,我将其注入到每个存储库中。 在Google上快速search,每个人都build议你不要使用DataContext的单例实例,因为它可能会在未来给你一些内存泄漏。 所以,受这篇文章的启发,为每个Web请求创build一个DataContext的单例实例就是答案(如果我错了,请纠正我的错误!) http://blogs.microsoft.co.il/blogs/gilf/archive/2010/05/18/how-to-manage-objectcontext-per-request-in-asp-net.aspx 但是,UNITY不支持“每个networking请求”终身pipe理器。 但是,可以实现自己的自定义生命期pipe理器,它可以为您处理。 实际上,这是在这篇文章中讨论: Singleton每呼叫上下文(Web请求)在Unity 问题是,现在我已经实现了上述职位描述的自定义生存期pipe理器,但是我不确定这是否可以这样做。 我也想知道datacontext实例在提供的解决scheme中的位置? 我错过了什么吗? 有没有更好的办法来解决我的“问题”? 谢谢! **添加了关于我的实现的信息** 以下是我的Global.asax,Controller和Repository中的代码片断。 这清楚地表明了我的实施情况。 Global.asax中 var container = new UnityContainer(); container .RegisterType<ProductsRepository>(new ContainerControlledLifetimeManager()) .RegisterType<CategoryRepository>(new ContainerControlledLifetimeManager()) .RegisterType<MyEntities>(new PerResolveLifetimeManager(), dbConnectionString) 调节器 private ProductsRepository _productsRepository; private CategoryRepository _categoryRepository; public ProductsController(ProductsRepository productsRepository, CategoryRepository categoryRepository) { _productsRepository = productsRepository; _categoryRepository = categoryRepository; } public […]
System.Transactions.TransactionScope和EF6的Database.BeginTransaction什么区别? 有人可以举一个小例子,或只是解释清楚使用哪一个? PS:在我的项目中,我正在使用EF6。 我已经阅读了文档,但没有多大帮助。 还查了一些例子,但是他们使用的是SqlConnection.BeginTransaction ,现在MS已经在EF6中引入了这个新的Database.BeginTransaction 。
如何使用codefirst EF4创build非持久性属性? MS说有一个StoreIgnore属性,但我找不到它。 http://blogs.msdn.com/b/efdesign/archive/2010/03/30/data-annotations-in-the-entity-framework-and-code-first.aspx 有没有办法使用EntityConfiguration进行设置?
我已经阅读了很多关于在Entity Framework中保存分离实体的文章。 他们都似乎适用于旧版本的entity framework。 他们引用的方法,如ApplyCurrentValues和ChangeObjectState似乎并不存在。 一时兴起,我决定尝试一种我通过intellisensefind的方法,我想确保这是做这件事的正确方法,因为我不明白幕后发生了什么: public void SaveOrder(Order order) { using (VirtualWebEntities db = new VirtualWebEntities()) { db.Orders.Attach(order); db.Entry(order).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } 这是更新已更改的现有项目的正确方法吗?
命名我的数据库表时,我更喜欢使用单数名词。 然而,在EF代码中,生成的表格总是复数。 我的DbSets是多元化的,我相信是EF生成名称的地方,但我不想将这些名称单数化,因为我相信在代码中使用复数forms更为实用。 我也试图压倒设置,但无济于事。 有任何想法吗? 这是我的代码和谢谢。 MyObjectContext.cs public class MyObjectContext : DbContext, IDbContext { public MyObjectContext(string connString) : base(connString) { } public DbSet<Product> Products {get;set;} public DbSet<Category> Categories {get;set;} //etc. protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>(); } }
我试图插入一些数据在我的数据库使用entity framework模型,但由于一些未知的原因给我,它什么都不做。 我在这里错过了什么? using (var context = new DatabaseEntities()) { var t = new test { ID = Guid.NewGuid(), name = "blah", }; context.AddTotest(t); context.SaveChanges(); }
entity framework是否知道标识列? 我正在使用SQL Server 2005速成版,并有几个主键是标识列的表。 当我使用这些表来创build一个实体模型,并将该模型与一个实体数据源绑定到一个formview以创build一个新的实体时,我被要求input一个标识列的值。 有没有办法让框架不要求身份列的值?
我正在创build软件,用户可以根据旧产品创build新产品。 现在我需要使用Entity Framework进行复制/克隆操作。 首先,我开始写这样的: foreach(表1中的sourcedata1) { …创build新表 …复制数据 …创buildGuid …补充 foreach(表2中的sourcedata2) { …创build新表 …复制数据 …创buildGuid …补充 … 等等 } } 问题是这不是一个好办法。 是否有任何简单的方法克隆信息(除了需要为新行生成的Guid)或者我应该手动复制一切? 其他解决scheme 您也可以使用EmitMapper或AutoMapper来复制属性。
我正在检查Professional ASP.NET MVC的第二版,并且实现了EFreplaceLINQ to SQL。 我对第一本书的LINQ to SQL很熟悉,但是我对EF一无所知。 无论如何,在阅读代码的时候,除了名字之外似乎没有任何改变。 相同的旧的存储库类,相同的旧function。 我做了一些研究。 我知道LINQ不仅限于SQL。 此外,EF不限于Microsoft家族SQL服务器。 在这个2岁的问题,人们对EF不满意,说这是过于复杂和所有。 但现在我正在阅读EF名下的相同代码。 只有类是由LINQ to SQL的ADO.NET实体模型生成的。 任何人都可以清楚EFfunction的大惊小怪,因为它现在是事实上的标准ORM?
我已经在我的数据库中放了一个新表,并且有4个表与外键有关系。 我以为我以同样的方式configuration了所有4个,但是我得到这个错误; 错误15错误113:多重性在“FK_OtherLeaves_ReportCellImages”关系中的angular色“ReportCellImage”中无效。 因为依赖angular色中的所有属性都是可空的,所以主体angular色的多重性必须是“0..1”。 所以为了简化我的表格, ReportCellImage表包含在主键和一个整数中的ReportCellImageId字段 OtherLeave表包含ReportCellImageId字段为可空的外键,默认值为4 其他表是相似的,都有一个外键configuration为joinReportCellImage表 这是一个最近的变化,所以当我从数据库更新我的edmx文件,为什么我得到这个错误,我该如何解决?