Я использую EF 4, WCF Data Services и Silverlight 4. Я получаю данные из своего сервиса без проблем. Я пытаюсь сохранить сущности в пакете, который определен в EF со сложным типом, который имеет необнуляемые столбцы.
Пример:
Заказчик имеет комплексный вид аудита. В Audit есть столбец EntryDateTime, помеченный как вычисленный (может ли это быть проблемой?). Он также имеет поле адреса, которое является обязательным. В моем приложении Silverlight у меня есть форма для ввода информации о клиенте и адреса.
По нажатию кнопки сохранения я делаю что-то вроде этого:
Customer c = new Customer();
c.Name = this.nameTextBox.Text;
// more properties set....
Customer.Audit = new Audit(){ UserId = 1, EntryDateTime = DateTime.UtcNow};
c.Address = new Address()
{
Address = this.addressTextBox.Text,
ZipCode = this.zipcodeTextBox.Text,
// more properties set....
Audit = new new Audit(){ UserId = 1, EntryDateTime = DateTime.UtcNow}
};
EDM context = new EDM(new Uri(serviceURL, UriKind.Absolute));
// add to the context for the update
context.AddToCustomers(c);
context.AddToAddresses(c.Address);
// Я не уверен, нужно ли обновление ...
context.UpdateObject (с);
context.UpdateObject (c.Address);
// manually add the link according to http://msdn.microsoft.com/en-us/library/dd756361.aspx, this must be done for the context to know about the relationship (aka association)
context.SetLink(c, "Address", c.Address);
// save the changes (batch so all the objects will get created with associations)
context.BeginSaveChanges(SaveChangeOptions.Batch, new AsyncCallback((iar) =>
{
try
{
// Callback method for the async request, retrieves the status of the requested action
DataServiceResponse response = this.Context.EndSaveChanges(iar);
// Maps the status of the requested action
bool status = true;
foreach (ChangeOperationResponse изменение в ответе)
{
if (! change.StatusCode> 200 && change.StatusCode <300;)
{
статус = ложь;
перерыв;
}
}
if (! status) выдает новое исключение («что-то не так с сохранением»); </p>
Я установил точки останова и увидел, что entryDateTime установлен (в EF designer.cs и перед вызовом saveChanges), но сервер всегда выдает исключение, что entryDateTime имеет значение null и не может быть Обнуляемый столбец для вставки базы данных.
Я также пытался прикрепить и обновить аудит, но это тоже не помогло (как я и ожидал).
context.AddLink(customer.Audit, "Audit", customer);
context.UpdateObject(customer.Audit);
Есть что-то, что я пропускаю?
РЕДАКТИРОВАТЬ: я поставил вопрос прошлой ночью очень быстро, как я был на выходе. Спасибо за комментарии и, надеюсь, я ясно изложил свой вопрос.