在应用程序运行时更改值后,我的用户模型出现问题,未使用正确的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;}
}
答案 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