2017-01-25 32 views
0

我正在使用UnitOfWork模式在我的Asp.Net應用程序中抽象數據庫訪問。我基本上遵循此處介紹的的UnitOfWork模式方法:如何使用UnitOfWork模式添加ID?

https://chsakell.com/2015/02/15/asp-net-mvc-solution-architecture-best-practices/

不過,我掙扎明白,我怎麼會得到一個新添加的項目的ID。就像我想將新客戶添加到我的客戶存儲庫一樣,我將如何獲取客戶ID?問題是添加和提交解耦,並且在提交之後才知道標識。

有沒有一種方法可以使用UnitOfWork模式獲取添加項目的ID?

+1

這裏最大的問題是:你爲什麼需要這個ID?我沒有閱讀鏈接,但是這種氣味就像一種架構,它無助於在一個事務中提交完整的對象圖。 –

+0

我需要將cookie存儲在cookie中。 – brinch

回答

0

我不認爲有辦法做到這一點,除非你打破了模式,並通過一些額外的信息關於新創建的實體。

由於只會在提交成功後分配Id,並且如果您沒有關於創建/更新/刪除哪些實體的信息,則幾乎不可能知道它。

我曾經做過它使用下面的代碼(我不推薦它,雖然我卻用它這個不需要專門)工作

public string Insert(Person entity) 
{ 
    uow.Repository.Add(entity); //public Repository object in unit of work which might be wrong 
    Response responseObject = uow.Save(); 
    string id = entity.Id; //gives the newly generated Id 
    return id; 
} 
1

單位應該是整個請求的事務。

只需從新創建的對象中返回人員ID即可。

取決於你所使用的技術爲您的數據訪問,這將有所不同,但如果您使用的是實體框架,你可以做到以下幾點:

var person = DbContext.Set<Person>().Create(); 

// Do your property assignment here 

DbContext.Set<Person>().Add(person); 

return person.Id; 

通過創建Person實例這種方式,你會得到一個允許延遲加載的跟蹤實例,以及使用Id屬性,因爲在調用SaveChanges(通過結束工作單元)時它將被更新。