如何解决创建新记录时,实体框架不会设置FK
|| 我正在尝试通过实体框架在以下概念模型中向现有标头添加Line。 我已经通过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不能为null。但是,由于我设置了导航属性,因此EF不应填写吗?如果我填写HeaderId,它可以工作,但是我不想每次都设置它。
关于我在做什么错的任何想法吗?
编辑:添加了连接字符串
解决方法
给定您的实体数据模型,这应该可以工作:
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();
, 代替这个
newLine.Header = context.Headers.ToList().First();
做这个:
newLine.HeaderId = context.Headers.First().HeaderId;
不要尝试直接分配对象,设置适当的外键(在本例中为HeaderId
),并让框架负责其余的工作。
编辑
请参阅BrokenGlass的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。