我有一个名为Tour
的表和另一个表名TourPlan
。
这些表格如下所示;
Tour TourPlan
Id (PK,int,not null) Id (PK, int, not null)
Title (nvarchar(100), null) Title (nvarchar(100), null)
TourId (FK, int, not null)
问题是使用现有值更新TourPlan
表。
这是我的更新代码;
Tour tour = TourController.GetTourById(Int32.Parse("13"));
tour.TourPlan.Clear();
foreach (ListItem item in lbPlans.Items)
{
tour.TourPlan.Add(new TourPlan() { Title = item.Text });
}
这是我的更新方法;
public static int UpdateTour(Tour tour)
{
using (var context = new aisatourismEntities())
{
Tour tUpd = context.Tour.FirstOrDefault(t => t.Id == tour.Id);
if (tUpd != null)
{
tUpd.Title = tour.Title;
tUpd.TourPlan = tour.TourPlan;
}
return context.SaveChanges();
}
}
但它没有更新,它会两次插入计划。 我怎么解决这个问题?
答案 0 :(得分:2)
您需要更新TourPlan的数据,而不是覆盖实例:
public static int UpdateTour(Tour tour)
{
using (var context = new aisatourismEntities())
{
Tour tUpd = context.Tour.FirstOrDefault(t => t.Id == tour.Id);
if (tUpd != null)
{
tUpd.Title = tour.Title;
tUpd.TourPlan.Id= tour.TourPlan.Id;
tUpd.TourPlan.TourId= tour.TourPlan.TourId;
tUpd.TourPlan.Title = tour.TourPlan.Title;
}
return context.SaveChanges();
}
}
这当然假设您已经有一个附加的TourPlan实例。如果没有,则需要将其附加到DbContext。
答案 1 :(得分:1)
这是您更新TourPlan的方法应如下所示:
public static void UpdateTour(Tour tour, TourPlan tourPlan)
{
using (var context = new aisatourismEntities())
{
context.Tours.Attach(tour);
context.Entity(tourPlan).Property(plan => plan.Title).IsModified = true;
context.SaveChanges();
}
}
方法的第二个参数必须已经准备好了#34; TourPlan
。