Asp.Net MVC 3 - Linq To Entities - PK с нулевым значением не вставляется в БД (не требуется нулевое значение :)) - PullRequest
1 голос
/ 17 февраля 2011

Я использую последнюю версию Asp.Net MVC.

По какой-то причине, когда мой POST (Action Create) в моем контроллере получает удар. Кажется, я не могу добавить его в набор сущностей.

Что у меня есть,

1) Моя EntityModel (* .edmx файл)

2) Контроллер, который ссылается на объект:

     private db.DataContainer _db = new db.DataContainer();

3) Мой метод (я использую Guid как pk):

   [HttpPost]
    public ActionResult Create(Client client)
    {
        try
        {
            client.Id = Guid.NewGuid();

            /* method 2
            Client cl = new Client();
            cl.Id = Guid.NewGuid();
            cl.email = client.email;
            cl.Adres = client.Adres;
            cl.companyName = client.companyName;
            cl.fax = client.fax;
            cl.phone = client.phone;
            */
            //    client.Id = Guid.NewGuid();
            _db.ClientSet.AddObject(client);
            _db.SaveChanges();
            return RedirectToAction("Index");
        }
        catch (Exception ex)
        {
            var ex_message = ex.Message;
            var ex_data = ex.Data;
            var ex_ix = ex.InnerException;
            return View();
        }
    }

4) Вот мое InnerException:

 [System.Data.SqlClient.SqlException] = {"Cannot insert the value NULL into column 'Id', table 'lst.dbo.ClientSet'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."}

Кажется, что оба не работают: (

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

GUID не поддерживаются в качестве первичных ключей в Entity Framework. Вам нужно будет изменить метод сохранения, чтобы сгенерировать новый GUID для добавленных объектов http://msdn.microsoft.com/en-us/library/dd283139.aspx

0 голосов
/ 17 февраля 2011

Кажется, что изменение моего «saveCommand» дало мне временное решение: Я скандировал:

_db.SaveChanges() 

Для

_db.SaveChanges(System.Data.Objects.SaveOptions.None);
...