Узнайте, какие поля обновляются - PullRequest
4 голосов
/ 22 февраля 2011

Я использую LINQ To SQL для обновления адреса пользователя.Я пытаюсь отследить, какие поля были обновлены.

Метод GetChangeSet() просто сообщает мне, что я обновляю сущность, но не сообщает мне, какие поля.

Что еще делатьМне нужно?

var item = context.Dc.Ecs_TblUserAddresses.Single(a => a.ID == updatedAddress.AddressId);

//ChangeSet tracking
item.Address1 = updatedAddress.AddressLine1;
item.Address2 = updatedAddress.AddressLine2;
item.Address3 = updatedAddress.AddressLine3;
item.City = updatedAddress.City;
item.StateID = updatedAddress.StateId;
item.Zip = updatedAddress.Zip;
item.Zip4 = updatedAddress.Zip4;
item.LastChangeUserID = request.UserMakingRequest;
item.LastChangeDateTime = DateTime.UtcNow;

ChangeSet set = context.Dc.GetChangeSet();

foreach (var update in set.Updates)
{
    if (update is EberlDataContext.EberlsDC.Entities.Ecs_TblUserAddress)
    {

    }
}

Ответы [ 2 ]

3 голосов
/ 23 февраля 2011

Использование ITable.GetModifiedMembers.Он возвращает массив ModifiedMemberInfo объектов, по одному для каждого измененного свойства объекта.ModifiedMemberInfo содержит CurrentValue и OriginalValue, показывающие, что именно изменилось.Это очень удобная функция LINQ to SQL.

Пример:

ModifiedMemberInfo[] modifiedMembers = context.YourTable.GetModifiedMembers(yourEntityObject);

foreach (ModifiedMemberInfo mmi in modifiedMembers)
{
    Console.WriteLine(string.Format("{0} --> {1}", mmi.OriginalValue, mmi.CurrentValue));
}
0 голосов
/ 22 февраля 2011

Вы можете обнаружить обновления, наблюдая уведомления об изменениях.Уведомления предоставляются через события PropertyChanging или PropertyChanged в установщиках свойств.

Например, вы можете расширить созданный класс Ecs_TblUserAddresses следующим образом:

public partial class Ecs_TblUserAddresses
{
    partial void OnCreated()
    {
        this.PropertyChanged += new PropertyChangedEventHandler(User_PropertyChanged);
    }

    protected void User_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        string propertyName = e.PropertyName;
        // do what you want
    }
}

В качестве альтернативы, если вы хотитечтобы отслеживать изменение специального свойства, вы можете использовать один из этих OnPropertyNameChanging частичных методов, например (для City в вашем примере):

partial void OnCityChanging(string value)
{
    // value parameter holds a new value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...