Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架赢得';创建新记录时不设置FKs_.net_Wcf_Entity Framework - Fatal编程技术网

.net 实体框架赢得';创建新记录时不设置FKs

.net 实体框架赢得';创建新记录时不设置FKs,.net,wcf,entity-framework,.net,Wcf,Entity Framework,我正试图通过实体框架向以下概念模型中的现有标题添加一行 我已经通过wcf数据服务公开了这个模型。我正在尝试添加如下记录: SampleModelContainer context = new SampleModelContainer(new Uri("http://localhost:57588/WcfDataService1.svc")); Line newLine = new Line(); newLine.item = 123; // Generate new LineId newL

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

我已经通过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,它会工作,但我不想每次都设置它

你知道我做错了什么吗

编辑:添加了连接字符串

,而不是此字符串

newLine.Header = context.Headers.ToList().First();
这样做:

newLine.HeaderId = context.Headers.First().HeaderId;
不要试图直接分配对象,设置适当的外键(在本例中为
HeaderId
),并让框架处理其余部分

编辑


请参阅BrokenGlass的答案。

鉴于您的实体数据模型,这应该是可行的:

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

我知道这是可行的。但EF的目的不就是让我不必处理FKs吗?虽然这是一个相对简单的expample,但是如果这些行也有一组项呢?然后我必须创建行,获取新创建行的id,然后应用该id。我认为EF的作用是允许我在对象内创建集合,然后进行一次调用来创建集合?@Jared这是因为
Line
对象不是代理。因此,在
Header
属性的setter中没有逻辑来更新
HeaderId
@Eranga的值,这是有意义的,但我仍然需要找出在不设置FK的情况下创建这些对象的正确方法。谢谢我的Lines实体上没有AddObject方法?我用的是EF4.1。这可能是因为我是通过wcf数据服务消费的吗?这个问题的质量很差。Tag提到了WCF,但问题本身并没有任何关于WCF如何与问题相关的注释。此外,在一个答案下面的评论提到了WCF数据服务,这给了这个问题完全不同的范围——我想你在客户端有一个问题,不是吗?如果您想先得到答案,请学习如何提问以及如何使用正确的标记-我们看不到您的代码,因此无法推断那里发生了什么!顺便说一句:
context.Lines.ToList().Last().LineId+1
当我看到它时,我心脏病发作了。@Ladislav我在问题中说我的EF模型是通过WCF数据服务公开的。(第三行)提供的所有代码都在我的客户机上。您还希望看到其他哪些代码?除了自动生成的内容外,我只添加了很少的内容。此外,这是一个简单到足以暴露我的问题的示例项目,在我的真实数据库中,我们有一组数字序列函数,这些函数提供了一组字母数字主键,这使得我的简单场景目前过于复杂。谢谢好的,对不起。即使我读了你的问题三遍,我也完全错过了那部分。