我有一個實體在EntitySet中具有關聯實體的集合。最終,我試圖報告對此實體進行的一些更改。我很可能會使用GetModifiedMembers()方法來做到這一點,我猜我可以對EntitySet中的每個實體做同樣的事情,但我不知道如何判斷該EntitySet中是否有任何刪除。如何檢查LINQ to SQL實體集上的刪除
這樣做的最好方法是什麼?
我有一個實體在EntitySet中具有關聯實體的集合。最終,我試圖報告對此實體進行的一些更改。我很可能會使用GetModifiedMembers()方法來做到這一點,我猜我可以對EntitySet中的每個實體做同樣的事情,但我不知道如何判斷該EntitySet中是否有任何刪除。如何檢查LINQ to SQL實體集上的刪除
這樣做的最好方法是什麼?
您可以使用dataContext.GetChangeSet()
來跟蹤所有更改的實體並過濾特定的T
實體。請看看這是你想要什麼:
public static void ShowModifiedEntitiesInfo<T>(DataContext context) where T : class
{
foreach (var entity in context.GetChangeSet().Updates.Where(del => del is T).Cast<T>())
{
ModifiedMemberInfo[] modifiedMembers = context.GetTable<T>().GetModifiedMembers(entity);
Console.WriteLine("Updated Entity: " + entity.ToString());
Console.WriteLine(" (Members Changed)");
foreach (var member in modifiedMembers)
{
Console.WriteLine(" - Member Name: " + member.Member.Name);
Console.WriteLine(" - Original Value: " + member.OriginalValue.ToString());
Console.WriteLine(" - Current Value: " + member.CurrentValue.ToString());
}
}
foreach (var entity in context.GetChangeSet().Inserts.Where(del => del is T).Cast<T>())
{
Console.WriteLine("Inserted Entity: " + entity.ToString());
}
foreach (var entity in context.GetChangeSet().Deletes.Where(del => del is T).Cast<T>())
{
Console.WriteLine("Deleted Entity: " + entity.ToString());
}
}
編輯:
是你所需要的是這樣的?
public static void ShowModifiedCustomerInfo(MyDataContext context, Customer customer)
{
ModifiedMemberInfo[] modifiedMembers = context.Customers.GetModifiedMembers(customer);
List<Order> updatedOrders = context.GetChangeSet().Updates.Where(e => e is Order).Cast<Order>().Intersect<Order>(customer.Orders).ToList<Order>();
List<Order> insertedOrders = context.GetChangeSet().Inserts.Where(e => e is Order).Cast<Order>().Intersect<Order>(customer.Orders).ToList<Order>();
List<Order> deletedOrders = context.GetChangeSet().Deletes.Where(e => e is Order).Cast<Order>().Intersect<Order>(customer.Orders).ToList<Order>();
if (modifiedMembers.Length > 0 || updatedOrders.Count > 0 || insertedOrders.Count > 0 || deletedOrders.Count > 0)
{
Console.WriteLine("Updated Customer: " + customer.ToString());
foreach (var member in modifiedMembers)
{
Console.WriteLine(" - Member Name: " + member.Member.Name);
Console.WriteLine(" - Original Value: " + member.OriginalValue.ToString());
Console.WriteLine(" - Current Value: " + member.CurrentValue.ToString());
}
foreach (var entity in updatedOrders)
{
Console.WriteLine(" Updated Order: " + entity.ToString());
}
foreach (var entity in insertedOrders)
{
Console.WriteLine(" Inserted Order: " + entity.ToString());
}
foreach (var entity in deletedOrders)
{
Console.WriteLine(" Deleted Order: " + entity.ToString());
}
}
}
的Customer
是實體和具有EntitySet<Order>
。據我所知,你應該知道客戶本身是否發生了變化,以及是否有客戶的任何訂單也發生了變化。
CodeSmith的PLINQO捕獲執行SubmitChanges時所做的所有更改,並將其全部打包在可從上下文LastAudit屬性訪問的Audit對象中。報告更改的內容和更新的類型。有一個樣本在http://plinqo.com/home.ashx?NoRedirect=1#Auditing_18
我想過使用GetChangeSet(),但我怎麼知道如果其中一個被刪除的實體是父母的EntitySet的成員? – 2009-01-13 17:15:11