我有以下课程:
public class Location
{
public int Id { get; set; }
public string Description { get; set; }
public string CarId { get; set; }
public Car Car { get; set; }
}
public class Car
{
public string Id { get; set; }
public string Color { get; set; }
}
观点:
<div>@Html.LabelFor(location => location.Description)</div>
<div>@Html.EditorFor(location => location.Description)</div>
<div>@Html.LabelFor(location => location.Car.Id)</div>
<div>@Html.EditorFor(location => location.Car.Id)</div>
<div>@Html.LabelFor(location => location.Car.Color)</div>
<div>@Html.EditorFor(location => location.Car.Color)</div>
当我尝试这个时:
[HttpPost]
public ActionResult Create(Location location)
{
if (ModelState.IsValid)
{
Car car = db.Car.Find(location.Car.Id);
if (car != null)
db.Entry(car).CurrentValues.SetValues(location.Car);
else
db.Car.Add(location.Car);
db.Location.Add(locacao);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(locacao);
}
它在'db.SaveChanges'中断,因为它说'无法在对象'dbo.Car中插入重复键'。'
如果我删除'db.Location.Add(locacao);',那么它对于汽车(插入和更新)工作得很好,但在数据库中没有添加任何位置。
如果数据库中没有汽车ID,如何更新,并插入新位置,我该如何插入新车?
答案 0 :(得分:1)
Add
方法始终在对象图中添加所有实体,因此db.Car.Add(location.Car)
和db.Location.Add(location)
都插入了location和car。
试试这个:
db.Location.Add(locacation);
// You can also use another way to find if you are working with a new Car
// like location.Car.Id == 0
if (db.Car.Any(c => c.Id == location.Car.Id))
{
db.Entry(location.Car).State = EntityState.Modified;
}
db.SaveChanges();