实体框架在创建新记录时不会设置FK

时间:2011-06-22 00:17:22

标签: .net wcf entity-framework

我试图通过实体框架在以下概念模型中为现有标题添加一行。

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 :(得分:0)

而不是这个

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

这样做:

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

不要试图直接分配对象,设置适当的外键(在本例中为HeaderId),让框架处理其余的事情。

修改

见BrokenGlass的答案。

答案 1 :(得分:0)

这应该适用于您的实体数据模型:

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();