Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么要使用这个可查询的修改(更新)数据库?_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 为什么要使用这个可查询的修改(更新)数据库?

C# 为什么要使用这个可查询的修改(更新)数据库?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,使用此变量时,我遇到以下错误: 附加类型为“”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改” 这迫使我从: db.Entry(model.sub.State=EntitySt

使用此变量时,我遇到以下错误:

附加类型为“”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”

这迫使我从:
db.Entry(model.sub.State=EntityState.Modified;to:EntityState.Added(创建新的Db条目,我不需要它) 守则:

{
        var loggedInUserId = User.Identity.GetUserId();
        var member = await db.member.SingleOrDefaultAsync(m => m.ApplicationUserId == loggedInUserId);

        //check if the subject name already exists.
        var match = await db.Subject.Select(s => s.SubjectName).FirstOrDefaultAsync(subjectName => subjectName.Equals(model.sub.SubjectName));

        model.rev.Created = DateTime.Now;
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        bool comper = string.Equals(model.sub.SubjectName, match, StringComparison.InvariantCultureIgnoreCase);
        if (comper == true)
        {
            var getSubject = (from c in db.Subject.Where(aa => aa.SubjectName.ToString().ToLower().Equals(match)) select c);
            var GetSubjectId = await (from a in getSubject select a.SubjectId).SingleAsync();
            var R_getvelue = await getSubject.SingleAsync();
            if (model.rev.GBU == "Good")
            {
                //Error
                var Good = R_getvelue.Good;
                var Bad = R_getvelue.Bad;
                var Ugly = R_getvelue.Ugly;
                //OK
                //var Good = await (from a in getSubject select a.Good).SingleAsync();
                //var Bad = await (from b in getSubject select b.Bad).SingleAsync();
                //var Ugly = await (from u in getSubject select u.Ugly).SingleAsync();
                model.sub.Bad = Bad;
                model.sub.Ugly = Ugly;
                int iGoodRating = Convert.ToInt32(Good);
                iGoodRating++;
                model.sub.Good = iGoodRating;
                model.sub.SubjectId = GetSubjectId;
                model.sub.Total = Convert.ToInt32(model.sub.Ugly + model.sub.Bad + model.sub.Good);
                db.Entry(model.sub).State = EntityState.Added

            }

您是否在视图模型/视图中使用DB实体?我强烈建议不要这样做,并手动从DB加载实体,而不是为此使用更改跟踪器。这段代码很快就变得难以控制和维护。我很乐意接受建议,你有什么建议?我认为,在这里要做的第一件事是摆脱ViewModel中的DB模型,完全独立使用ViewModels,即使是你在这里编辑的
模型。然后,在您的方法中,您应该按Id从数据库中加载当前的
模型
,该Id取自用于编辑它的ViewModel,并手动从ViewModel的属性更新DB model中的属性。我不确定我是否理解,您是否可以将整个方法体包含在名称中,参数+在您的帖子中定义模型的类型,以便我可以在您的代码中显示它?