Tag: dbcontext

具有过滤的dbContext的多租户Web应用程序

我是ASP.Net MVC和多租户Web应用程序的新手。 我做了很多阅读,但作为初学者,我只是按照我的理解。 所以我设法构建了一个示例场景Web应用程序,需要解决它的结尾部分。 希望这种情况对其他一些初学者也有用,但欢迎任何其他方法。 提前致谢 1)SQLServer 2008中的数据库。 2)数据层:名为MyApplication.Data的C#类库项目 public class AppUser { [Key] public virtual int AppUserID { get; set; } [Required] public virtual int TenantID { get; set; } [Required] public virtual int EmployeeID { get; set; } [Required] public virtual string Login { get; set; } [Required] public virtual string Password { […]

将TransactionScope与entity framework6一起使用

我无法理解的是,是否可以对上下文进行更改并在提交之前在同一事务中获取更改。 这就是我要找的: using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (var context = new DbContext()) { //first I want to update an item in the context, not to the db Item thisItem = context.Items.First(); thisItem.Name = “Update name”; context.SaveChanges(); //Save change to this context //then I want to do a query on the updated item […]

entity framework核心使用多个DbContexts

我有一个问题,当我尝试访问我的PartsDbContext中的字段时,我收到以下错误: System.Data.SqlClient.SqlException:’无效的对象名’fieldName” 这似乎是因为我正在尝试使我的PartsDbContext使用与我的ApplicationDbContext相同的数据库,该数据库与Identity一起使用。 我需要知道如何设置第二个dbcontext以使用使用/创建不同数据库的EF核心。 我已经尝试创建第二个连接字符串,但这会让我犯这个错误: System.Data.SqlClient.SqlException:’无法打开登录请求的数据库“PartsDb”。 登录失败。 用户’DESKTOP-4VPU567 \ higle’登录失败。’ 这是我的代码: appsettings.json “ConnectionStrings”: { “DefaultConnection”: “Server=(localdb)\\mssqllocaldb;Database=aspnet-PrecisionCustomPC-b14db89e-86ad-4855-a17f-ac64a04339aa;Trusted_Connection=True;MultipleActiveResultSets=true”, “PartsConnection”: “Server=(localdb)\\mssqllocaldb;Database=PartsDb” }, “Logging”: { “IncludeScopes”: false, “LogLevel”: { “Default”: “Warning” } } PartsDbContext.cs public class PartsDbContext : DbContext { public DbSet Towers { get; set; } public DbSet Motherboards { get; set; } public PartsDbContext(DbContextOptions options) : base(options) […]

如何从SQL查询返回动态对象

我有一个storeprocdure返回集合的情况,但我没有如何对象结构,因为查询是非常动态的。 一个查询可以返回: Id | 位置| MarketSegment | …… n列 而另一个可以回来 Id | 销售代表| 位置| 地区| …… n列 我只是简单地返回一个“对象”,如下面的代码所示。 我知道这不会起作用,但是如何设置它呢? using (DbContext db = new Context()) { var items = db.Database.SqlQuery( “SP @Param1, @Param2”, new SqlParameter(“Param1”, ped), new SqlParameter(“Param2”, 25) ).ToList(); return Request.CreateResponse<List>(HttpStatusCode.OK, items); } 编辑: 我不知道无论如何显示SP都会有所帮助,除非我能解释得更多。 每列都表示为自定义字段。 用户可以创建n个自定义字段。 因此,如果您为User1运行SP并且他有5个自定义字段,则每个自定义字段将在列中表示,但如果User2有3个自定义字段,则只表示3列。 我无法控制的是自定义字段名称和自定义字段数。

C#EF 4.1在DbContext中动态创建表

我想在运行时将表添加到SQLCe数据库,因为表名不是静态的并且在编译时是已知的。 我尝试使用Entity Framework 4.1和DbContext执行此操作,如下所示: public class PersonContext : DbContext { public PersonContext() : base(“UnicornsCEDatabase”) { } } public class Person { public int NameId { get; set; } public string Name { get; set; } } public class Program { static void Main(string[] args) { using (var db = new PersonContext()) { db.Database.Delete(); //Try to […]

不同DbContext和不同模式之间的entity framework关系

所以,我有两个主要对象,会员和公会。 一个会员可以拥有一个公会,一个公会可以拥有多个会员。 我在一个单独的DbContext和单独的类库中有Members类。 我打算在多个项目中重用这个类库并帮助区分,我将数据库模式设置为“acc”。 我已经广泛测试了这个库,可以在acc.Members表中添加,删除和更新成员。 行会类是这样的: public class Guild { public Guild() { Members = new List(); } public int ID { get; set; } public int MemberID { get; set; } public virtual Member LeaderMemberInfo { get; set; } public string Name { get; set; } public virtual List Members { get; set; } […]

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 ( […]

如何在Moqentity framework中调用SqlQuery

我已经能够使用此链接使用Moq从entity framework中模拟DbSet 。 但是,我现在想知道如何模拟对SqlQuery的调用。 不确定这是否可行或者如何依赖于模拟的db上下文知道正在调用什么“查询”。 以下是我试图嘲笑的内容。 var myObjects = DbContext.Database .SqlQuery(“exec [dbo].[my_sproc] {0}”, “some_value”) .ToList(); 我目前还没有尝试任何东西,因为不知道如何开始嘲笑这个例子。 DbSet是在下面并重新迭代,我可以正确地模拟返回MyObject的DbSet ,但现在我正在尝试模拟一个返回MyObject列表的SqlQuery。 var dbContext = new Mock(); dbContext.Setup(m => m.MyObjects).Returns(mockObjects.Object); dbContext.Setup(m => m.Database.SqlQuery… something along these lines

DbContext不会保持连接打开以便重复使用

我正在尝试重用现有的数据库连接,以便我可以使用TransactionScope执行多个数据库操作,而无需调用MSDTC。 entity framework(使用4.1版本中的新DbContext API)似乎不希望保持显式打开的连接打开。 旧的ObjectContext API保持连接按预期打开并记录 。 由于DbContext API只是在DbContext使用ObjectContext ,我预计会有相同的行为。 有谁知道这个改变是有意还是已知问题? 我无法在任何地方找到它。 public void ConnectionRemainsOpen() { using (var context = new TestDataContext()) { try { Assert.AreEqual(ConnectionState.Closed, context.Database.Connection.State); context.Database.Connection.Open(); var firstRecord = context.Table3.FirstOrDefault(); // this Assert fails as State == ConnectionState.Closed Assert.AreEqual(ConnectionState.Open, context.Database.Connection.State); var newRecord = new Table3 { Name = “test”, CreatedTime = DateTime.UtcNow, ModifiedTime […]

N层应用程序中的多个DbContexts

我正在创建我的第一个N-Tier MVC应用程序,我遇到了如何使用我的数据库第一种方法管理多个DbContexts 。 我有以下几层 Presentation Service (WCF) Business Data Access 我不想在我的服务层中使用entity framework引用,但是我没有看到如何创建接口或管理两个上下文的东西。 我让它在IDatabaseFactory中使用单个上下文,但我似乎无法找到管理两个的方法。 下面是我在我的服务ctor中创建的UnitOfWork ,但是我看到它的每一种方式我仍然依赖于SiteModelContainer ,而实际上我有另一个上下文。 public class UnitOfWork : IUnitOfWork { private SiteModelContainer _context; private readonly IDatabaseFactory _databaseFactory; protected SiteModelContainer SiteContext { get { return _context ?? (_context = _databaseFactory.Get()); } } public UnitOfWork(IDatabaseFactory factory) { _databaseFactory = factory; _context = _databaseFactory.Get(); } //More […]