首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新entity-framework中的相关表?

如何更新entity-framework中的相关表?
EN

Stack Overflow用户
提问于 2013-05-08 17:13:09
回答 2查看 7.5K关注 0票数 1

我有一个名为Tour的表和另一个名为TourPlan的表。这些表的关系如下;

代码语言:javascript
复制
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表。

这是我的更新代码;

代码语言:javascript
复制
Tour tour = TourController.GetTourById(Int32.Parse("13"));
tour.TourPlan.Clear();
foreach (ListItem item in lbPlans.Items)
   {
     tour.TourPlan.Add(new TourPlan() { Title = item.Text });
   }

这是我的update方法;

代码语言:javascript
复制
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();
     }
 }

但是它没有更新,它插入了两次plan。我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-08 17:18:14

您需要更新TourPlan的数据,而不是覆盖实例:

代码语言:javascript
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2015-04-23 17:39:59

下面是用于更新TourPlan的方法:

代码语言:javascript
复制
    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();
        }
    }

该方法的第二个参数必须已经“准备好”为TourPlan

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16436785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档