在我的应用程序中,我为每个调用创建一个dbcontext,依赖项通过Ninject注入它.
我一直在考虑创建一个单例类(ContextManager - BaseController将在每个请求上设置上下文),以使上下文可用,从而允许所有服务共享相同的上下文.这将使得例如禁用代理创建等变得容易,因为仅从一个地方管理上下文.
但是,当对象是单个对象时,每个请求都会覆盖上下文,这对我来说不起作用(我不希望多个请求共享一个上下文).
最好的方法是什么(如何在请求范围内优选单个上下文)?
我正在开发一个ASP.NET MVC5 Web应用程序.我正在使用Entity Framework 6来满足我的数据存储需求.我正在使用它的代码第一个功能,启用了迁移.自动迁移设置为false.
我有两张桌子,我正试图改变.第一个表叫做课程,这是它的模型.
public class course
{
[Key]
public int courseID { get; set; }
public int categoryID { get; set; }
public int PaymentOptionsID { get; set; }
[Required]
[DisplayName("Course Code")]
public string courseCode { get; set; }
[Required]
[DisplayName("Course Name")]
public string courseName { get; set; }
[Required]
[DataType(DataType.Currency)]
public decimal price { get; set; }
[DataType(DataType.MultilineText)]
[DisplayName("Course Description")]
[StringLength(255, ErrorMessage = "Only a maximum of 255 characters are allowed")]
public string courseDescription { get; …Run Code Online (Sandbox Code Playgroud) c# sql-server ef-migrations entity-framework-6 asp.net-mvc-5
如何使用Moq模拟Entity Framework 6 ObjectResult,以便我可以对依赖于EF数据库连接的代码进行单元测试?
按照这些方式阅读了许多问题和答案,并从我所读过的内容中收集了许多金块,我已经实现了我认为是一个相当优雅的解决方案,并且觉得我应该分享它,因为这里的社区帮助我实现了目标.因此,我将继续回答这个问题,并可能打开一些嘲弄(双关语):
c# entity-framework moq entity-framework-6 entity-framework-6.1
我正在使用SQL Server 2008和Entity Framework 6.1.3.我希望实现基于OFFSET/FETCH而不是Take()&Skip()的数据分页.
我在线搜索没有运气.有些帖子建议迁移到SQL Server 2012.在我的情况下,这不是一个选项.
有人可以建议如何在SQL Server 2008和EF 6.1.3中使用OFFSET/FETCH
sql-server pagination entity-framework sql-server-2008 entity-framework-6
System.InvalidOperationException: The instance of entity type 'ProjectAssignment' cannot be tracked because another instance with the same key value for {'ProjectID'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add(TKey key, InternalEntityEntry entry)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.St
Run Code Online (Sandbox Code Playgroud)
我制作了一个带有Worker(ID和其他列)和Project(ID和其他列)Entity和ProjectAssignment(许多ID分配给许多Workers)的项目。但是,当我尝试获取ProjectAssignment数据时,会出现Application Insights中的错误。奇怪的是,该ID并未更早出现。
这是https://github.com/Streamc/ContosoObserve1/tree/master/Proj_s
context.Database.EnsureCreated();
var ProjectAssignments = new ProjectAssignment[]
{
new ProjectAssignment
{
ProjectID = Projects.Single( i => i.ID == 1).ID,
WorkerID …Run Code Online (Sandbox Code Playgroud) 我已经将列表字段添加到我的业务模型中。它尚未存储在数据库中,我希望使用以下类似内容暂时将其映射:
return MyContext.Foos.Select(foo=> new Foo
{
Id = foo.Id,
Name = foo.Name,
RequiredFeatures = new List<string>()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,Entity Framework抱怨无法在LINQ to Entities查询中实例化新列表:
无法在LINQ to Entities查询中初始化实现IEnumerable'System.Collections.Generic.List`1 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'的类型。
基本上,它List<string>是一种复杂类型,尽管它包含默认构造函数,但该构造函数要求先运行一些初始化代码,然后才能使用列表。实体框架只是不了解如何从SQL方面生成空列表。
我还尝试使用空数组实现相同的结果:
return MyContext.Foos
.Select(foo=> new Foo
{
Id = foo.Id,
Name = foo.Name,
RequiredFeatures = new string[0]
}).ToList();
Run Code Online (Sandbox Code Playgroud)
LINQ to Entities不支持LINQ表达式节点类型'NewArrayBounds'。
同样,即使实体表达式简单得多,实体框架也不支持该表达式。因此,我尝试了所有数组中最简单的表达式:
return MyContext.Foos
.Select(foo=> new Foo
{
Id = foo.Id,
Name = foo.Name,
RequiredFeatures = { }
}).ToList();
Run Code Online (Sandbox Code Playgroud)
在构造函数和初始化程序中,LINQ to Entities仅支持属性或字段参数绑定。
我知道一种替代方法是先将所有对象加载到内存中,然后通过C#初始化列表:
return MyContext.Foos.ToList()
.Select(foo=> …Run Code Online (Sandbox Code Playgroud) 我应该在EF中建立简单的一对一关系。但是我尝试插入时收到以下错误:
ReferentialConstraint映射到商店生成的列。列:“ ACCOUNT_ID”。
控制台应用程序示例:
namespace EF_ConsoleApp_Test
{
public class Program
{
public static void Main(string[] args)
{
var account = new Account
{
AccountNumber = "00123456",
CustomerValue = new Customer { FirstName = "Joe" }
};
using (var db = new MainContext())
{
db.Accounts.Add(account);
db.SaveChanges();
}
}
}
[Serializable]
[Table("CUSTOMERS")]
public class Customer
{
[Key]
[Column("CUSTOMER_ID")]
public int? Id { get; set; }
[Required]
[Column("FIRST_NAME")]
[StringLength(45)]
public string FirstName { get; set; }
public virtual Account Account { get; set; …Run Code Online (Sandbox Code Playgroud) 我试图加入两个表并创建一个元组列表,但得到的错误是"LINQ to Entities中只支持无参数构造函数和初始值设定项"
var list = (
from a in db.CategoryRatings
join c in db.OverallPerformanceByCategories
on a.CategoryRatingId equals c.CategoryRatingId
where c.ReviewId == review.ReviewId
select(new Tuple<string, double, double>(a.CategoryRatingName, a.CategoryWeight, c.Score))
).ToList();
ViewData["ListOverallRating"] = list;
Run Code Online (Sandbox Code Playgroud)
我不想创建使用元组的匿名类型列表,也可以建议其他方式.
我在C#中有以下代码:
public async Task<List<Table>> GetRows()
{
return await db.Table.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
其中db是EF 6 DbContext。
假设我访问相同的DbContext,如何在F#中编写等效内容?
我想出了这段代码,但我陷入了困境:
let getRows = async {
let q = query {
from r in db.Table
select r
}
q |> Seq.map(fun row -> ...) // <-- Here I might want to do some custom function
}
Run Code Online (Sandbox Code Playgroud)
谢谢
c# ×7
sql-server ×3
.net ×1
asp.net ×1
c#-to-f# ×1
f# ×1
linq ×1
moq ×1
pagination ×1
tuples ×1