Службы данных WCF, сохраняющие данные / проблемы с сущностями - PullRequest
1 голос
/ 19 сентября 2011

Я пытаюсь сохранить данные обратно в базу данных через WCF, но продолжаю получать:

Cannot insert the value NULL into column 'Id', table 'ResellerPlatform.dbo.Contacts'; column does not allow nulls. INSERT fails. The statement has been terminated. (System.Data.UpdateException)

То же самое происходит через WebGet на самой стороне сервиса:

[WebGet]
public void AddContact()
{
    var Contact = new Models.ResellerPlatform.Contact
    {
        Id = Guid.NewGuid(),
        Name = "Foo"
    };

    base.CurrentDataSource.AddToContacts(Contact);
    base.CurrentDataSource.SaveChanges();
}

Модель контакта - это базовая сущность с идентификатором (Guid) и именем (строка), без связей или чего-либо еще. Вот мои правила доступа:

Config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
Config.SetEntitySetAccessRule("*", EntitySetRights.All);

Я не могу понять, почему он выдает исключение, поскольку Id не равен null. Идеи, предложения?

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Похоже, установка StoreGeneratedPattern на ноль не решила проблему при использовании Guid для первичного ключа - я думал, что EF может обрабатывать Guid в качестве первичных ключей?

1 голос
/ 19 сентября 2011

Мне кажется, что EF ожидает, что база данных сгенерирует значение вашего столбца ключа Id.

Как правило, у вас есть варианты:

  1. Создайте значение идентификатора на стороне клиента (код c #), как вы это сделали, и установите для свойства StoreGeneratedPattern значение none.
  2. Создайте значение id на стороне базы данных и установите для свойства StoreGeneratedPattern значение Identity.

Второй вариант не поддерживается в EF версии 1. Вам нужно открыть и изменить файл edmx в редакторе xml, чтобы заставить это работать (подробности см. В этой записи в блоге ).

То, что вы сделали, представляет собой сочетание обеих опций: вы устанавливаете значение в своем клиентском коде, но сообщаете EF с помощью StoreGeneratedPattern=Identity, что база данных сгенерирует это значение.

...