Нет полезной нагрузки JSON при использовании генератора клиентского кода OData V4 и вызове Save Change с PostOnlySetProperties
Я сгенерировал клиентский код OData с помощью генератора клиентского кода OData V4 для Visual Studio 2017. Когда я вызываю сохранить изменения, значения полей не включаются в полезную нагрузку JSON. Может ли кто-нибудь помочь мне понять, почему?
Код клиента генерируется из конечной точки веб-API Dynamics CRM https://.api.crm.dynamics.com/api/data/v9.1/.
Полная полезная нагрузка генерируется, когда я вызываю context.SaveChanges(); без установки опции SaveChangesOptions.PostOnlySetProperties, однако это устраняет другие проблемы, такие как ownerid, не может быть нулевым.
Ниже приведен снимок экрана с полезной нагрузкой запроса фидлера и исходным кодом.
class Program
{
public static void Main(string[] args)
{
Poc.D365Crm.OData.Microsoft.Dynamics.CRM.Contact contact = null;
try
{
var context = new Poc.D365Crm.OData.Microsoft.Dynamics.CRM.System(new Uri("https://<domain>.api.crm.dynamics.com/api/data/v9.1/"));
context.SendingRequest2 += new EventHandler<SendingRequest2EventArgs>(delegate (object sender, SendingRequest2EventArgs e)
{
e.RequestMessage.SetHeader("Authorization", CreateAuthenticationHeader());
});
var accounts = context.Accounts.Take(1).ToList();
contact = new Poc.D365Crm.OData.Microsoft.Dynamics.CRM.Contact()
{
Firstname = "Fred",
Lastname = "Flintstone",
Birthdate = DateTime.Now.AddYears(-13),
//Parentcustomerid_account = accounts[0],
Emailaddress1 = "ff@ff.com",
Contactid = Guid.NewGuid()
};
var contactCollection = new DataServiceCollection<Contact>(context);
contactCollection.Add(contact);
var response = context.SaveChanges(SaveChangesOptions.PostOnlySetProperties);
Log("Success!", ConsoleColor.Green);
}
catch (Exception ex)
{
}
}
public static void Log(string message, ConsoleColor colour)
{
var originalColour = Console.ForegroundColor;
Console.ForegroundColor = colour;
Console.WriteLine(message);
Console.ForegroundColor = originalColour;
}
public static string CreateAuthenticationHeader()
{
string aadTenant = "https://login.windows.net/<domain>";
string aadClientAppId = "app id guid";
string aadClientAppSecret = "secret";
string aadResource = "https://<domain>.crm.dynamics.com";
AuthenticationContext authenticationContext = new AuthenticationContext(aadTenant, false);
var creadential = new ClientCredential(aadClientAppId, aadClientAppSecret);
var authenticationResult = authenticationContext.AcquireTokenAsync(aadResource, creadential).Result;
return authenticationResult.CreateAuthorizationHeader();
}
}
}