Linq to sql 如何检查LINQ to SQL EntitySet上的删除

Linq to sql 如何检查LINQ to SQL EntitySet上的删除,linq-to-sql,Linq To Sql,我有一个实体,它在EntitySet中有一个关联实体的集合。最后,我试图报告对该实体所做的一些更改。我很可能会使用GetModifiedMembers()方法来实现这一点,我猜我可以对EntitySet中的每个实体执行相同的操作,但我不确定如何判断该EntitySet中是否有任何删除 执行此操作的最佳方法是什么?您可以使用dataContext.GetChangeSet()跟踪所有更改的实体,并过滤特定的T实体。请查看这是否是您想要的: public static void ShowMo

我有一个实体,它在EntitySet中有一个关联实体的集合。最后,我试图报告对该实体所做的一些更改。我很可能会使用GetModifiedMembers()方法来实现这一点,我猜我可以对EntitySet中的每个实体执行相同的操作,但我不确定如何判断该EntitySet中是否有任何删除


执行此操作的最佳方法是什么?

您可以使用
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 showModifiedIdentitiesInfo(DataContext上下文),其中T:class
{
foreach(context.GetChangeSet().Updates.Where(del=>del是T.Cast()中的var实体)
{
ModifiedMemberInfo[]modifiedMembers=context.GetTable().GetModifiedMembers(实体);
Console.WriteLine(“更新的实体:+Entity.ToString());
Console.WriteLine(“(成员已更改)”);
foreach(modifiedMembers中的变量成员)
{
Console.WriteLine(“-Member Name:+Member.Member.Name”);
Console.WriteLine(“-Original值:”+member.OriginalValue.ToString());
Console.WriteLine(“-Current Value:+member.CurrentValue.ToString());
}
}
foreach(context.GetChangeSet().Inserts.Where(del=>del是T.Cast())中的var实体)
{
Console.WriteLine(“插入的实体:+Entity.ToString());
}
foreach(context.GetChangeSet()中的var实体。Deletes.Where(del=>del是T.Cast())
{
Console.WriteLine(“删除的实体:+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());
            }
        }
    }
public static void ShowModifiedCustomerInfo(MyDataContext上下文,客户)
{
ModifiedMemberInfo[]modifiedMembers=context.Customers.GetModifiedMembers(客户);
List updateOrders=context.GetChangeSet().Updates.Where(e=>e是订单).Cast().Intersect(customer.Orders).ToList();
List insertedOrders=context.GetChangeSet().Inserts.Where(e=>e是订单).Cast().Intersect(customer.Orders).ToList();
List deletedOrders=context.GetChangeSet().Deletes.Where(e=>e是订单).Cast().Intersect(customer.Orders).ToList();
如果(modifiedMembers.Length>0 | | UpdateOrders.Count>0 | | | insertedOrders.Count>0 | | | deletedOrders.Count>0)
{
Console.WriteLine(“更新的客户:+Customer.ToString());
foreach(modifiedMembers中的变量成员)
{
Console.WriteLine(“-Member Name:+Member.Member.Name”);
Console.WriteLine(“-Original值:”+member.OriginalValue.ToString());
Console.WriteLine(“-Current Value:+member.CurrentValue.ToString());
}
foreach(updateOrders中的var实体)
{
Console.WriteLine(“更新的顺序:+entity.ToString());
}
foreach(插入器中的var实体)
{
Console.WriteLine(“插入的顺序:+entity.ToString());
}
foreach(deletedOrders中的var实体)
{
Console.WriteLine(“已删除的订单:+entity.ToString());
}
}
}

Customer
是实体,具有
EntitySet
。据我所知,您需要知道客户本身是否发生了变化,以及该客户是否有任何订单也发生了变化。

CodeSmith的PLINQO捕获了执行SubmitChanges时所做的所有更改,并将其打包到可从上下文LastAudit属性访问的Audit对象中。报告更改内容和更新类型。在

中有一个示例,我曾想过使用GetChangeSet(),但我如何知道其中一个已删除的实体是否是父实体集的成员?我尝试了这个方法,但似乎不起作用。我想这可能与我如何加载子实体有关。不过我认为你的答案是正确的,因为我认为问题在我这边。