模型未使用新值更新

时间:2018-10-30 12:32:10

标签: c# asp.net-mvc dynamics-crm

在应用程序运行时更改值后,我的用户模型出现问题,未使用正确的ParentAccount ID更新。

例如

我将运行该应用程序并更改联系人的上级帐户。然后创建一个订单,并使用下面的“创建”方法将父帐户分配给该订单。

现在,我认为它应该运行“ GetUser”方法,该方法将更新当前用户模型,然后获取当前用户并将其分配给销售订单。

与其类似,它会跳过该过程并首先运行其下面的代码,并且永远不会使用正确的父帐户ID更新它。

有人对为什么会发生有任何建议吗?

谢谢!

oracle.bpel.services.datacontrol.BPMTaskFormException: javax.naming.NameNotFoundException: Unable to resolve TaskQueryService. Resolved '; remaining name TaskQueryService
        at oracle.bpel.services.datacontrol.XSDDataControl.invokeOperation(XSDDataControl.java:503)
        at oracle.adf.model.bean.DCBeanDataControl.invokeMethod(DCBeanDataControl.java:512)
        at oracle.adf.model.binding.DCInvokeMethod.callMethod(DCInvokeMethod.java:269)
        at oracle.jbo.uicli.binding.JUCtrlActionBinding.doIt(JUCtrlActionBinding.java:1742)

这是用户模型

public void Create(CrmContextCore _crmContext, Guid productId, ClaimsPrincipal User)
{
    // User Model 
    UserEntityModel currentuser;

    DAL_UserEntity UserData = new DAL_UserEntity();


    var EmailAddress = User.Claims.FirstOrDefault(c => c.Type == System.Security.Claims.ClaimTypes.Email)?.Value;

    var salesorder = new Entity("salesorder");
    {
        // Go get the current user data from crm system

        currentuser = UserData.GetUser(_crmContext, EmailAddress);

        // ISSUE! If i change this value while the application is running and rerun the method it shows the old value of currentuser not the new one??

        salesorder["customerid"] = new EntityReference("account", currentuser.ParentAccount.Id);
        salesorder["contactid"] = new EntityReference("contact", currentuser.ContactId);
        salesorder["emailaddress"] = currentuser.Email;
        salesorder["name"] = "PO123";
    }

    _crmContext.ServiceContext.AddObject(salesorder);

    _crmContext.ServiceContext.SaveChanges();
}

在此处创建用户模型

public class UserEntityModel
{

    public Guid ContactId {get; set;}
    public EntityReference ParentAccount { get; set; }
    public Guid Account {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string Email {get; set;}

}

3 个答案:

答案 0 :(得分:0)

没有看到模型定义,我只能这样回答并且与实体框架有关:

如果您需要从模型表所映射到的数据库表中的诸如autoincrement字段之类的值中返回更新的/新的ID值,请使用以下方法修饰模型字段:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

这将使新的ID值在模型收到EF的更新/创建信号后可用。

答案 1 :(得分:0)

您正在创建一个新实体,并为从数据库中检索到的实体分配值。如果要更新数据库实体,则需要更新数据库实体上的字段,或者可以将新实体附加到数据上下文。参见此帖子Why use Attach for update Entity Framework 6?

答案 2 :(得分:0)

可能是因为您在两次调用之间都重新使用了CrmContextCore对象。首次调用它时,将添加用户记录并由上下文进行跟踪,然后后续调用实际上并不会重新查询CRM,而是从被跟踪的对象返回旧数据。

与这个问题Getting weird behavior when retrieving data from Microsoft CRM using LINQ