C# 实体框架未检测到现有导航属性,并尝试重新添加该属性
我定义的模型和关系与 当我有一个现有的C# 实体框架未检测到现有导航属性,并尝试重新添加该属性,c#,sql,sql-server,entity-framework,asp.net-core,C#,Sql,Sql Server,Entity Framework,Asp.net Core,我定义的模型和关系与 当我有一个现有的blog并想向其中添加新的posts时,entity framework会尝试为每个post添加一个新的blog。例如: var blog = new Blog(){ Name = "MyBlog" }; context.Blogs.add(blog); context.SaveChanges(); // now I want to add a post to that blog var post = new Post() { Name = "MyFirs
blog
并想向其中添加新的post
s时,entity framework会尝试为每个post
添加一个新的blog
。例如:
var blog = new Blog(){ Name = "MyBlog" };
context.Blogs.add(blog);
context.SaveChanges();
// now I want to add a post to that blog
var post = new Post() { Name = "MyFirstPost", Blog = blog };
context.Posts.add(post);
context.SaveChanges();
此时,实体框架试图用Name=“MyBlog”
创建一个新的Blog
,但没有意识到我已经有了Blog
因此,当我查看context.SaveChanges
上的日志时,我会看到以下内容:
INSERT INTO [Blogs] ([ID], [Name])
VALUES (@p0, @p1);
在这一点上,它引发了一个例外,如下所示:
当identity_insert设置为OFF时,无法在表“Blogs”中插入identity列的显式值
显然,它正在尝试添加一个新的博客
,其id为id=0
,但由于id
是自动生成的,因此失败了
因此,我的问题是为什么EntityFramework不识别现有的
博客
,并尝试添加一个新博客?保存后阅读博客(设置Id)
您应该将文章添加到现有的Blog对象中,而不是尝试将其直接插入到Posts集合中。您能详细说明一下吗?示例?Herohtar的意思是
blog.Posts.Add(new Post(){Name=“x”})
或类似的indeed我的观点是它背后的理性是什么?您发布的内容很有效,我更感兴趣的是,为什么我发布的代码会导致创建一个新的博客
条目。
var blog = new Blog(){ Name = "MyBlog" };
context.Blogs.Add(blog);
context.SaveChanges();
blog = db.Blogs
.OrderBy(b => b.BlogId)
.First();
var post = new Post() { Name = "MyFirstPost", Blog = blog };
context.Posts.Add(post);
context.SaveChanges();