Tag: entity framework

如何使用Moq和Autofixture模拟entity framework6

我正在使用AutoMoq,但由于entity framework(使用dbContext和代码优先) dbContext我有点困惑如何编写我的第一个unit testing // in service class(constructor) private readonly MyContext context; public PriceService(MyContext context) { this.context = context; } // following would be in nunit test method. var fixture = new Fixture().Customize(new AutoMoqCustomization()); var priceService = fixture.Create(); 当我运行unit testing时,它会崩溃 在Ploeh.AutoFixture.Kernel.TerminatingSpecimenBuilder.Create(对象请求,ISpecimenContext上下文) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.c__DisplayClass6.b__1(ISpecimenBuilder b) 在System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在System.Linq.Enumerable.d__a5`1.MoveNext() 在System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable`1 source) 在Ploeh.AutoFixture.Kernel.RecursionGuard.Create(对象请求,ISpecimenContext上下文) 在Ploeh.AutoFixture.Kernel.CompositeSpecimenBuilder.c__DisplayClass6.b__1(ISpecimenBuilder b) 在System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在System.Linq.Enumerable.d__a5`1.MoveNext() […]

永远不会调用OnModelCreating

我正在开始使用entity framework。 问题是我的OnModelCreating方法永远不会被调用。 这是我的上下文类: public class TestContext : DbContext { public TestContext() : base(“name=TestDBConnectionString”) { } public DbSet WorkItems { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } } 连接字符串 我打算在打电话时进入OnModelCreating: using (var context = new TestContext()) { } 我犯错误的地方?

SaveChangesAsync不更新数据库表中的值

这是我的表: 统计数据 Id,Depth,RefreshCounter 样本记录: Id Depth RefreshCounter 1 1 1 2 1 0 3 1 0 4 1 0 现在我需要做的是每当我刷新页面时,我需要在深度为1的数据库表中将此refreshcounter值增加1 。 我在加载浏览页面时调用此方法: @Html.Action(“IncrementRefreshcounter”, “Statistics”, new { id = 1}) //for eg:1,2,3,4 这是我的代码,它执行此操作: [ChildActionOnly] public ActionResult IncrementRefreshcounter(int id) { using ( var context = new MyDBContext()) { //at each page refresh i would be passing different […]

冻结linq IQueryable(作为ToList()。AsQueryable()会这样做)

有没有办法冻结IQueryable以便在命中数据库时不会向查询添加其他连接? 例如,我可以使用.ToList()来冻结查询,但这会产生性能影响,因为我所做的任何过滤都在中间层上,而且我在数据库服务器上预过滤没有任何性能提升? 为清晰起见编辑: 我有一个OData服务,它返回一个IQueryable ,客户端可以根据需要过滤/排序/项目。 我只想阻止他们提取更多数据。 我可以通过执行ToList().AsQueryable()来做到这一点,但是它失去了lazyLoading的优势,并且随之而来的是允许客户端过滤请求的全部目的。 我看到的一个选项是设置: EnableQueryAttribute.AllowedQueryOptions以排除Expand ,但是即使我的初始Query已经扩展,客户端仍然无法选择这些部分。

使用Entity Framework加入视图时使用.Include()

我使用索引视图,这是一个没有任何关系的实体(与我的表实体的关系将是更好的,但这似乎几乎不可能实现)。 这个视图由4个FK组成,它们共同形成PK: PortalID CategoryID BranchID CompanyID 现在我加入这个视图来选择一组像这样的公司: var companies = (from c in database.Companies.FindAll().Include(“City”) join l in database.CompanyList.FindAll() on c.ID equals l.CompanyID where l.PortalID == 9 && l.BranchID == 1597 select c).Take(10); 实体公司与表格(城市ID,城市)有关联,我希望包含并完美地运作。 但是,当我加入视图时,.Include()被完全忽略,从而导致查询没有连接到cities表。 正如您可能已经使用存储库模式得出结论而FindAll()返回IQueryable并且我已经手动将Include扩展添加到IQueryable,如下所示: public static IQueryable Include(this IQueryable sequence, string path) { var objectQuery = sequence as ObjectQuery; if (objectQuery != null) return […]

使用Entity Framework从SQL数据库中获取所有内容

我有这样的产品清单 var r = db.Products.Where(x => x.Sites .Where(z => z.Key == associatedProducts.Key) .Any() ).ToList() 有一个名为Products的实体,我想从产品中获取所有元素,但那些存在于associatedProducts.Products中 我怎样才能做到这一点 ?

附加类型为“X”的实体失败,因为同一类型的另一个实体已具有相同的主键值

错误信息 : 附加“FaridCRMData.Models.Customer”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。 如果图中的任何实体具有冲突的>键值,则在使用Attach()方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。 这可能是因为某些实体是新的并且尚未收到数据库生成的键值。 在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。 我的代码: public class FactorController : Controller { public JsonResult SaveFactor(Factor factor,int id) { if (id > 0) { bool result = new FactorService.BaseService.Update(factor); return new JsonResult() { Data = result }; } } } FactorService.BaseService.cs: public bool Update(TEntity entity) { var entry = context.Entry(entity); if (entry.State == EntityState.Detached || […]

如何更改架构名称

我正在开发一个使用EF 4.1 Code First的ASP.NET MVC应用程序。 我必须将默认架构名称(dbo)更改为其他名称。 我试过这个: public string SchemaName; public void MyContext() { SchemaName = GetSchemaName(); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().ToTable(“TB_ACC_HOLDERS”, SchemaName); } 但它不起作用。 当我获得我的Context的新实例并调用我的一些表时……生成的查询仍然带有“dbo”模式名称。 有人有想法解决这个问题吗?

无法将类型’List ‘隐式转换为’IEnumerable ‘

试图左转加入2个表 public IEnumerable GetApplicant() { IEnumerable applicantdata = Cache.Get(“applicants”) as IEnumerable; if (applicantdata == null) { var applicantList = (from a in context.Profiles join app in context.APPLICANTs on a.PROFILE_ID equals app.Profile_id into joined from j in joined.DefaultIfEmpty() select new { Profiles = a, APPLICANTs= j, }).Take(1000); applicantdata = applicantList.AsQueryable().OrderBy(v => v.APPLICANT_ID).ToList(); if (applicantdata.Any()) { Cache.Set(“applicants”, […]

entity framework:将varchar映射到DateTime属性

entity framework4。 MySQL的 我正在尝试将varchar列映射到类的DateTime属性 我的课: [Table(“webnews_in”)] public class WEBNews_in : AbsNews { private DateTime _inDateTimeAdded = DateTime.MinValue; public DateTime InDateTimeAdded { get { return _inDateTimeAdded; } set { _inDateTimeAdded = value; } } private DateTime _inDateTimeUpdated = DateTime.MinValue; public DateTime InDateTimeUpdated { get { return _inDateTimeUpdated; } set { _inDateTimeUpdated = value; } } } […]