Как проверить удаление в LINQ to SQL EntitySet - PullRequest
2 голосов
/ 13 января 2009

У меня есть объект, который имеет коллекцию связанных объектов в EntitySet. В конечном итоге я пытаюсь сообщить о некоторых изменениях, которые были внесены в эту организацию. Я, скорее всего, буду использовать метод GetModifiedMembers (), чтобы сделать это, и я предполагаю, что я могу сделать то же самое с каждой сущностью в EntitySet, но я не уверен, как определить, были ли какие-либо удаления в этом EntitySet .

Какой лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 13 января 2009

Вы можете использовать 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());
        }
    }

EDIT:

Тебе что-то нужно?

    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>. Насколько я понимаю, вы должны знать, изменился ли сам клиент и был ли какой-либо заказ от этого клиента, который также изменился.

0 голосов
/ 29 июля 2009

CodeSmith PLINQO фиксирует все изменения, сделанные при выполнении SubmitChanges, и упаковывает все это в объект Audit, к которому можно получить доступ из свойства LastAudit контекста. Отчеты о том, что изменилось и что это за обновление. Есть образец на http://plinqo.com/home.ashx?NoRedirect=1#Auditing_18

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...