如何更新Entity Framework 6中的相关数据

时间:2014-08-20 13:06:19

标签: c# entity-framework ado.net entity-framework-6

我有一个实体地区

public partial class Territory
{
    public Territory()
    {
        this.Employees = new HashSet<Employee>();
    }

    public string TerritoryID { get; set; }
    public string TerritoryDescription { get; set; }
    public int RegionID { get; set; }

    public virtual Region Region { get; set; }
    public virtual ICollection<Employee> Employees { get; set; }
}

我有一个实体区域

public partial class Region
{
    public Region()
    {
        this.Territories = new HashSet<Territory>();
    }

    public int RegionID { get; set; }
    public string RegionDescription { get; set; }

    public virtual ICollection<Territory> Territories { get; set; }
}

在我的客户端应用程序上,我创建了Territory类和Region类的对象,以便在数据库中插入和更新数据,并将这些对象传递给我的存储库类中的AddTerriory和UpdateTerriory方法。

Territory obj = new Territory();
obj.TerritoryID = "12123";
obj.TerritoryDescription = "test terriotry 1";
obj.RegionID = 9;
obj.Region = new Region{RegionDescription = "test region 1"};

public void UpdateTerriory(Territory territory)
{
       using (var context = new travelEntities())
       {
                context.Territories.Attach(territory);
                context.Entry(territory).State = EntityState.Modified;
                context.SaveChanges();
            }
        }
}

    public static void AddTerriory(Territory territory)
    {
            using (var context = new travelEntities())
            {
                context.Territories.Add(territory);
                context.SaveChanges();
            }
    }

但它不起作用,它的抛出错误。当我必须更新并插入Territory和Region时,我应该如何构建我的对象。 有时,在更新Territory时,Region的某些字段也会更新,因此我也必须更新它。 当我们添加新的Territory时,我们也会添加一个新的区域。添加新区域时,我们不会使用现有区域。

当我必须更新并插入Territory和Region ??

时,我应该如何构建我的对象

编辑:我正在使用Entity Framework 6 DB First和Oracle 11i作为后端。

1 个答案:

答案 0 :(得分:0)

首先,为什么要使用区域标识符的字符串表示?它可以是整数吗?

public void InsertOrUpdate(Territory territory) 
{ 
    using (var context = new TravelEntities()) 
    { 
        context.Entry(territory).State = 
                      string.IsNullOrWhiteSpace(territory.TerritoryID) ? 
                                   EntityState.Added : 
                                   EntityState.Modified; 
        if (territory.Region!=null)
        {
             context.Entry(territory.Region).State = 
                      territory.Region.RegionID == 0 ? 
                                   EntityState.Added : 
                                   EntityState.Modified;
        }


        context.SaveChanges(); 
    } 
}

您可以将此方法作为通用方法,将实体和键选择器功能作为参数。