Почему мое значение (для ComplexType) равно нулю для вставки SQL в WCF Data Service и Entity Framework 4? - PullRequest
0 голосов
/ 18 ноября 2010

Я использую 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);

Есть что-то, что я пропускаю?

РЕДАКТИРОВАТЬ: я поставил вопрос прошлой ночью очень быстро, как я был на выходе. Спасибо за комментарии и, надеюсь, я ясно изложил свой вопрос.

1 Ответ

0 голосов
/ 19 ноября 2010

Проблема заключалась в том, что в Audit Complex Type для EntryDateTime StoreGeneratedPattern было установлено значение Computed, поскольку мы пытались заставить базу данных установить это для нас автоматически. Я зашел в базу данных и вручную добавил GetUtcDate () к значению или привязке по умолчанию и больше не получаю того же исключения. Теперь возникает вопрос, кому установить дату по умолчанию в конструкторе.

...