我试图通过实体框架在以下概念模型中为现有标题添加一行。
我通过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,它可以工作,但我不想每次都设置它。
关于我做错的任何想法?
编辑:添加了连接字符串
答案 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();