簡體   English   中英

如何在Entity Framework 6中更新相關數據

[英]How to update related data in 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時應如何構建對象?

編輯:我正在使用以Oracle 11i為后端的Entity Framework 6 DB First。

首先,為什么要使用地區標識符的字符串表示形式? 可以是整數嗎?

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(); 
    } 
}

您可以將該方法作為通用方法,以實體和鍵選擇器功能為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM