Это лучший способ обновить сущность из DataContext? - PullRequest
1 голос
/ 04 апреля 2011

Я обнаружил, что это способ обновления сущности из DataContext

    public bool UpdateLead(Lead lead)
    {

        OrganizationServiceContext context = GetOrgContext();
        Lead leadToTrack = getLead(lead.Id, context);
        leadToTrack.AccountId.Id = lead.AccountId.Id;
        //...
        context.UpdateObject(leadToTrack);

        context.SaveChanges();

        return true;
    }

Но у меня есть около 200 полей в этой сущности (благодаря Microsoft Dynamics CRM).Должен ли я написать 200 строк, как leadToTrack.Field1 = lead.Field1 или есть более краткий способ?

Спасибо

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

Вы можете использовать AutoMapper для этого - если у вас есть столько свойств, которые в основном имеют одно и то же имя с обеих сторон, это должно работать для вас.

2 голосов
/ 04 апреля 2011

Вы можете прикрепить объект и изменить его запись состояния объекта ...

context.Leads.Attach(lead);

ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(lead);
entry.ChangeState(EntityState.Modified);
context.SaveChanges();
1 голос
/ 04 апреля 2011

Вы можете сделать это с помощью отражения. Вот аналогичный метод, который я написал для этой цели:

    public static FMVHistory CloneFMV(FMVHistory F) {
        FMVHistory F_Clone = new FMVHistory();

        Type typeToClone = F.GetType();
        Type[] BadGenericTypes = new Type[] { typeof(EntityCollection<>), typeof(EntityReference<>) };
        Type[] BadTypes = new Type[] { typeof(System.Data.EntityKey) };

        foreach (PropertyInfo pi in typeToClone.GetProperties().Where(p => p.CanWrite)) {
            if (pi.PropertyType.IsGenericType && BadGenericTypes.Contains(pi.PropertyType.GetGenericTypeDefinition())
                || (BadTypes.Contains(pi.PropertyType))
                || (pi.Name.Equals("nameOfYourPrimaryKeyWhichYouDontWantCloned"), StringComparison.CurrentCultureIgnoreCase)))
                continue;

            pi.SetValue(F_Clone, pi.GetValue(F, null), null);
        }
        return F_Clone;
    }

За исключением того, что вместо передачи одного объекта, подлежащего клонированию, вы передаете исходный объект и целевой объект и копируете значения из одного в другой.

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