Tag: entity framework

如何为使用存储库的所有实例使用一个数据库上下文?

我做了一些建筑MVC错误,因为我不知道 IEntityChangeTracker的多个实例不能引用实体对象。 错误。 我的设置如下:我有一个访问数据库的repository ,它创建了一个dbcontext实例,我有控制器实例化他们需要的managers , managers都实例化他们自己的repository 。 这是问题,当控制器使用多个manager收集数据然后尝试创建使用此数据的对象时,将对象添加到dbcontext时会出现上述错误。 我读到了关于UnitOfWork模式的内容,但重新构建我的代码似乎需要做很多工作。 是否有快速修复能够更新数据库并避免错误? 谢谢。

LINQ to Entities中仅支持无参数构造函数和初始值设定项 – MVC / C#

我正在将我的Linq-to-Sql应用程序更改为EF 6.1,使用以下命令生成ViewData: public IEnumerable<KeyValuePair> GetOhaTypes () { return (from type in db.OhaType where type.Disabled == false orderby type.Name select new KeyValuePair(type.OhaTypeId, type.Name)); } 在控制器中: ViewData[“OhaTypes”] = _vRepository.GetOhaTypes(); 在视图中:@functions { List GetDropDownListItems (string listName, int currentValue) { var list = new List(); var pairs = this.ViewData[listName] as IEnumerable<KeyValuePair>; if (pairs != null) { list.AddRange(pairs.Select(pair => new […]

entity framework并行一对多关系

我一直在寻找尝试在EF中创建一个并行的一对多关系。 这是我的意思: 我有两个类,交易和用户: public class Transaction { public int ID { get; set; } public string ExecutorID { get; set; } public virtual User Executor { get; set; } public string ConsumerID { get; set; } public virtual User Consumer { get; set; } } public class User { public UserRole Role { get; set; […]

如何在ASP.NET C#中的用户控件之间传递值

我的页面中有3个用户控件。 其中一个用户控件是关于fileUploading,第二个是关于fileUploade关键字。 当文件上传时,fileUploading usercontrol返回记录该插入的Id。 现在我想在fileUploaded关键字中使用此id,但是当插入标签以查看fileuploading中的id时,用户控件显示右侧id例如1或2或..但是在关键字usercontrol中仅显示0值。 我使用entity framework工作。 如何在关键字用户控件中访问此ID。 谢谢。

EF6:如何根据实体ID自动生成唯一编号

考虑这样的实体: public class Document { public int Id { get; set; } public long code { get; set; } // Rest of Props } 我需要的是生成一个唯一的长代码,我更喜欢基于Id生成它。 一个简单的经典但不安全的解决方案是获取最后一个Id并将其增加一个并使用,但我正在寻找更好的解决方案,例如计算列,或任何其他方式将代码生成分配给数据库。 如果我尝试将其定义为计算列,则无法访问Id。 将其标记为标识是不可能的,因为Id已经是标识列。 创建获取最后一个ID的方法并不安全和干净。 到目前为止,我正试图在交易的帮助下做前经典解决方案,以确保安全。 还有更好的建议吗?

多重inheritance(可能是抽象类?)C#entity framework

最近几周,我一直致力于使用Visual Studio 2015在c#上基于Entity Framework 6(Code-First)开发数据库。 我目前正在研究inheritance提供的所有选项。 此时并遵循数据库的标准,我应该使用主键实现多重inheritance。 这意味着什么? 这意味着我应该实现一个inheritance自另一个类的类,并拥有自己的PK来识别他与父类不同的类。 此时我可以用TPC实现它,使父类抽象而不是在父类上定义任何PK。 这是此时代码的示例(这有效,我已对其进行了测试) public abstract class Person { public string Name { get; set; } public string LastName { get; set; } } [Table(“Students”)] public class Student : Person { [Key]public int Id_student { get; set; } public string code_s { get; set; } public virtual ICollection […]

在插入新的父对象时,阻止EF添加新的子对象而不是仅仅关联?

我有以下内容: public int CreateExercise(Exercise newExercise) { db.Exercises.Add(newExercise); db.SaveChanges(); return newExercise.ExerciseId; } 练习如下: public class Exercise { public Exercise() { Users = new Collection(); } [Key] [Required] public int ExerciseId { get; set; } [StringLength(300, ErrorMessage = “The value cannot exceed 300 characters. “)] public string Title { get; set; } public virtual ICollection Users{ get; […]

ef核心linq过滤子实体

我有一个linq查询的问题。 我有3个实体:用户,目标和结果。 每个用户可以有多个(或没有)目标,每个目标可以有多个(或没有)结果我想要一个返回所有用户的查询,包括可能的目标和可能的结果。 这很有效。 但现在我想要包含filter来过滤目标和结果。 这样查询只返回符合这些条件的用户,目标和结果。 public class User { public ICollection Targets {get;set;} public string otherProperty {get;set;} } public class Target { public ICollection Results {get;set;} public User user {get;set;} public string Language {get;set;} } public class Result { public Target Target {get;set;} public int score {get;set;} } 任何可以帮助我的EF核心linq专家? 亲切的问候,罗布雷希特 编辑1 var query = […]

linq to entities不承认该方法

我有一个存储库类,它有一个返回ObjectSet的方法 就像是 public class Repository:ObjectContext { public IObjectSet GetObjectSet() {…} } 当我在查询中使用它时,我得到linq到实体错误(不识别方法……) 我喜欢这样的想法,即拥有一个通用的存储库,每次都不会重新生成(使用T4模板)有没有办法扩展查询提供程序以识别我的方法? 但我确实想在服务器上解决它(换句话说,参与查询生成)。 使用它的示例代码是: static readonly Func getInstitutionByAuthorizedUserName = CompiledQuery.Compile( (ObjectContext ctx, string userName) => (from inst in ctx.GetObjectSet() join auths in ctx.GetObjectSet() on inst.Key equals auths.Institution.Key where auths.Name == userName select inst.Key).SingleOrDefault();

异步方法,包括对结果的异步调用和同步操作

我正在尝试创建一个异步方法,我可以多次调用并等待以后 – 该方法应该进行数据库调用,等待结果,一旦有结果就做一些操作,然后返回最终结果。 它看起来像这样: public async Task GetSomethingFromDbAndSelectSomethingOnServer() { //stuff is just an Entity Framework database call var stuff = await myEfDbContext.StuffTable.ToListAsync(); long itemsCount = stuff.Where(someQueryThatCantGoToDb).Count(); return itemsCount; } 这似乎是一个明显的错误,因为我将返回类型指定为Task,而实际上我只返回了很长时间。 这会编译,但抛出exception: EntityFramework.dll中发生了’System.NotSupportedException’类型的第一次机会exception 我打算像这样使用这个代码: Task myAsyncCall = GetSomethingFromDbAndSelectSomethingOnServer(); long myCount = await myAsyncCall; 这可能有点无关紧要,但是为了详细说明,这里有一些好处: Task pendingItemCountCall = _mongoItems.Find(filter).CountAsync(); long myCount2 = await pendingItemCountCall; 当然,区别在于它只是对db的异步调用,没有进一步的操作,我正在尝试在SQL调用中执行此问题。 编辑: 所以,实际上,这似乎是违规行: […]