gpt4 book ai didi

c# - 当我通过我的存储库更新时,我的一个实体没有保存在 Entity Framework 中

转载 作者:行者123 更新时间:2023-11-30 15:26:50 26 4
gpt4 key购买 nike

我有两个实体“Student”和“StudentImage”。我正在使用 MVC 5 并且我有一个表格,学生可以在其中填写他/她的个人资料和图像,然后将其保存到学生和学生图像表中。当没有以前的学生时,我可以同时插入学生和学生图像,但是当我的存储库进行更新时,只有学生得到更新而学生图像没有得到更新。*我已经完成了 sql 事件探查器检查,它看起来不像是在任何更新查询中使用了 studentimage。另一件事是它没有抛出任何错误。它完成并返回到我的 View 。

这是我的实体

public class Student
{
public int StudentId { get; set; }

[Index(IsUnique=true)]
[Required]
[MaxLength(128)]
public string AspNetUserRefId { get; set; }

public virtual StudentImage StudentImage { get; set; } //one-to-one

// other members below
}

public class StudentImage
{
[Key, ForeignKey("Student")]
public int StudentId { get; set; }

public byte[] Image { get; set; }

public virtual Student Student { get; set; } // one-to-one
}

这是我为我的学生在存储库中的更新方法

public void InsertOrUpdate(Student student)
{
if (!context.Students.Any(u => u.AspNetUserRefId == student.AspNetUserRefId))
{
// New entity
context.Students.Add(student);
}
else
{
// Existing entity
context.Entry(student).State = EntityState.Modified;
}
}

这是我发布的用于保存的 Controller 方法编辑

[HttpPost]
public ActionResult Edit(EditStudentViewModel studentViewModel)
{
if (ModelState.IsValid)
{
byte[] array;
using (MemoryStream ms = new MemoryStream())
{
studentViewModel.StudentImageFileBase.InputStream.CopyTo(ms);
array = ms.GetBuffer();
}

var student = new Student
{
AspNetUserRefId = studentViewModel.AspNetUserRefId,
CatchPhrase = studentViewModel.CatchPhrase,
StartedPracticing = Convert.ToInt16(studentViewModel.SelectedYearId),
Location = studentViewModel.Location,
Education = studentViewModel.Education,
Work = studentViewModel.Work,
SelfDescription = studentViewModel.SelfDescription,
Inspirations = studentViewModel.Inspirations,
StudentId = studentViewModel.StudentId,
StudentImage = new StudentImage { Image = array, StudentId = studentViewModel.StudentId}
};

studentRepository.InsertOrUpdate(student);
studentRepository.Save();
return RedirectToAction("Edit", "Student");
} else {
return View();
}
}

最佳答案

我认为您还需要将附加图像标记为已更改...

// Existing entity
context.Entry(student).State = EntityState.Modified;
context.Entry(student.StudentImage).State = EntityState.Modified;

...因为我认为它不会自动将修改后的状态传播到附加的学生图像记录中。假设 .StudentImage 实例已经是上下文的一部分。如果没有,那么您将需要添加它。

关于c# - 当我通过我的存储库更新时,我的一个实体没有保存在 Entity Framework 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28492286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com