我想先使用LLBLGen進行上竄,而不先取得然後保存實體。
我已經找到了更新的可能性,而不必先取得實體,但是我必須知道它已經存在。有什麼辦法可以在LLBLGen中插入或更新/合併/上傳
更新條目與插入新條目的頻率相同。
是否有可能一步完成此操作?
一步完成是否合理?
事實:
- LLBLGEN Pro的2.6
- SQL Server 2008 R2的
- .NET 3.5 SP1
我想先使用LLBLGen進行上竄,而不先取得然後保存實體。
我已經找到了更新的可能性,而不必先取得實體,但是我必須知道它已經存在。有什麼辦法可以在LLBLGen中插入或更新/合併/上傳
更新條目與插入新條目的頻率相同。
是否有可能一步完成此操作?
一步完成是否合理?
事實:
據我所知,這是不可能的,也沒能得到可能。
如果您只是對未獲取的實體調用adapter.Save(實體),則框架會認爲它是新建的。如果你仔細想想,框架怎麼知道是發出UPDATE還是INSERT語句?無論如何,某處某處必須查詢數據庫以查看該行是否存在。
創建一些爲單個實體(非遞歸)保存或多或少自動執行此操作並不困難。步驟如下:
我知道我對此有點遲,但正如我記得與LLBLGenPro一起工作,這是完全可能的,它的一個美人是永恆的可能! 我沒有我的樣品,但我敢肯定,你有一個名爲UpdateEntitiesDirectly
方法可以這樣使用:
// suppose we have Product and Order Entities
using (var daa = new DataAccessAdapter())
{
int numberOfUpdatedEntities =
daa.UpdateEntitiesDirectly(OrderFields.ProductId == 23 && OrderFields.Date > DateTime.Now.AddDays(-2));
}
當使用LLBLGenPro我們能夠做幾乎一切是可能的一個ORM框架,它太棒了! 它也有一種方法來執行稱爲DeleteEntitiesDirectly
的批量刪除,在需要刪除一個etity並將其替換爲另一個eta的場景中可能有用。
希望這是有幫助的。
嗨。我知道這種方法。問題是,我不知道要更新哪些項目以及要插入哪些項目。要知道我必須先取得他們(我現在所做的)。 – StampedeXV 2012-09-06 06:37:58
@StampedeXV如果你不知道要更新哪些實體,那麼你不知道要獲取哪些實體! – Ashkan 2012-09-06 06:41:33
此外,此方法僅更新存在的實體,它不會插入新的實體。 – Ashkan 2012-09-06 06:45:45
我想你可以通過使用EntityCollection來實現你要找的東西。首先通過DataAccessAdapter的FetchEntityCollection方法獲取要更新的實體,然後在該集合中更改任何您想要的內容,向其中插入新實體並使用DataAccessAdapter,SaveCollection方法保存它。這樣現有的實體將被更新並且新的實體將被插入到數據庫中。例如,在您想要操縱指定產品的訂單的產品訂單senario中,您可以使用類似如下的東西:
int productId = 23;
var orders = new EntityCollection<OrderEntity>();
using (DataAccessAdapter daa = new DataAccessAdapter())
{
daa.FetchEntityCollection(orders, new RelationPredicateBucket(OrderFields.ProductId == productId))
foreach(var order in orders)
{
order.State = 1;
}
OrderEntity newOrder = new OrderEntity();
newOrder.ProductId == productId;
newOrder.State = 0;
orders.Add(newOrder);
daa.SaveEntityCollection(orders);
}
他希望在**一步**中完成,而不是先取得實體。是否可以設置實體的主鍵更新? – Ashkan 2012-09-07 09:13:35
我不認爲如果一步就可能,它不是sql server的工作方式,所以也不是LLBLGen的方式。 – VahidNaderi 2012-09-07 10:13:26
如果可能的話,我想一步完成。有可能在SQL中執行此操作(如果我沒有記錯,可以使用MERGE或UPSERT),即使它們不完美。我已經按照你的建議去做了,但我正在尋找一個更好的方法來做到這一點。儘管謝謝你的回答! – StampedeXV 2012-09-07 14:35:01
沒錯。還有DB構造允許這個(即合併,upsert)。另外:手動將IsNew設置爲false,將實體保存在LLBLGen中允許在不首先獲取的情況下進行更新。我認爲下一步將非常簡單,如果可用則更新,否則插入。 – StampedeXV 2012-08-01 06:14:31