Entity Framework не будет устанавливать FK при создании новой записи - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь добавить строку в существующий заголовок в следующей концептуальной модели через структуру сущностей.

data model

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

SampleModelContainer context = new SampleModelContainer(new Uri("http://localhost:57588/WcfDataService1.svc"));

Line newLine = new Line();
newLine.item = 123;

// Generate new LineId
newLine.LineId = context.Lines.ToList().Last().LineId + 1;

// Grab a random header (doesn't matter right now)
newLine.Header = context.Headers.ToList().First();

context.AddToLines(newLine);            
context.SaveChanges();

Это происходит с ошибкой, которая гласит, что мой HeaderId не должен быть нулевым.Однако, не должно ли это быть заполнено EF, потому что я установил свойство навигации?Если я заполняю HeaderId, он работает, но я не хочу устанавливать его каждый раз.

Есть идеи, что я делаю неправильно?

РЕДАКТИРОВАТЬ: Добавлена ​​строка подключения

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Это должно работать с учетом модели данных вашей сущности:

Line newLine = new Line();
newLine.Item = 123;

// Grab a random header (doesn't matter right now)
var header = context.Headers.First();
newLine.Header = header; // Establish the relationship

// Add the new line
context.Lines.AddObject(newLine);
context.SaveChanges();
0 голосов
/ 22 июня 2011

Вместо этого

newLine.Header = context.Headers.ToList().First();

Сделайте это:

newLine.HeaderId = context.Headers.First().HeaderId;

Не пытайтесь назначать объекты напрямую, установите соответствующий внешний ключ (в данном случае HeaderId) и дайте фреймворку позаботиться обо всем остальном.

EDIT

См. Ответ BrokenGlass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...