Entity framework 在实体框架代码中,首先介绍如何为两个相关的1到常见的M已发布数据关系创建新记录

Entity framework 在实体框架代码中,首先介绍如何为两个相关的1到常见的M已发布数据关系创建新记录,entity-framework,ef-code-first,entity-framework-5,Entity Framework,Ef Code First,Entity Framework 5,我正在使用EF代码前5。 我有3个实体/POCO类-相关的提案、文档和模板。 提案与文件表之间存在M到M的关系。 模板与文档表具有M到M的关系 这是我的POCO C课程 当文档保存到db时被分配了唯一的ID,并且链接到我的提案时,这一点非常有效 但是,在具有相同操作的同一屏幕中,用户可以选择将添加到提案中的文档保存到新模板中。 因此,我希望模板表获得与我的one MVC action方法中添加到提案中的相同文档的引用。 我收到了发布的数据 -第一项建议。 -许多文件 -新模板的标题、说明 所以我

我正在使用EF代码前5。 我有3个实体/POCO类-相关的提案、文档和模板。 提案与文件表之间存在M到M的关系。 模板与文档表具有M到M的关系

这是我的POCO C课程

当文档保存到db时被分配了唯一的ID,并且链接到我的提案时,这一点非常有效

但是,在具有相同操作的同一屏幕中,用户可以选择将添加到提案中的文档保存到新模板中。 因此,我希望模板表获得与我的one MVC action方法中添加到提案中的相同文档的引用。 我收到了发布的数据 -第一项建议。 -许多文件 -新模板的标题、说明 所以我要更新的是所有3个表和这些发布的数据

我尝试了以下方法:

 proposal.Description = model.Description;
 proposal.Documents = GetDocumentsFromPostedFiles(model.Files);

 template.Description = model.TemplateDescription;
 template.Documents = proposal.Documents();

 db.Entry(proposal).State = EntityState.Added;
 db.Entry(template).State = EntityState.Added;   

 db.SaveChanges();
这显然更新不正确,因为新的未添加文档未设置文档id(默认值为0),因为数据库将在db.SaveChanges之后在数据库中设置它,所以当我运行它时,模板“文档id”被错误地保存为0

如何告诉实体框架模板对象的文档与刚刚添加的提案文档相关? 我使用提案或模板的1到M的起点告诉entity framework将它们添加到数据库中,但与我的情况一样,因为我有两个1到M的关系,我如何在执行初始db.SaveChanges时告诉EF这两个M表实际上是同一个表

还有其他可能的解决办法吗?我只能考虑先将提案保存到数据库中,然后从数据库中读取所有刚添加的文档及其主键创建的ID,然后将它们添加到我的模板中。 这将再次导致db.SaveChanges、Linq db Fetch和db.SaveChanges,我更希望在一个db.SaveChanges中执行此操作。

在提案初始化后调用
SaveChanges()

proposal.Description = model.Description;
proposal.Documents = GetDocumentsFromPostedFiles(model.Files);

db.Entry(proposal).State = EntityState.Added;
db.SaveChanges();

template.Description = model.TemplateDescription;
template.Documents = proposal.Documents;

db.Entry(template).State = EntityState.Added;   
db.SaveChanges();
 proposal.Description = model.Description;
 proposal.Documents = GetDocumentsFromPostedFiles(model.Files);

 template.Description = model.TemplateDescription;
 template.Documents = proposal.Documents();

 db.Entry(proposal).State = EntityState.Added;
 db.Entry(template).State = EntityState.Added;   

 db.SaveChanges();
proposal.Description = model.Description;
proposal.Documents = GetDocumentsFromPostedFiles(model.Files);

db.Entry(proposal).State = EntityState.Added;
db.SaveChanges();

template.Description = model.TemplateDescription;
template.Documents = proposal.Documents;

db.Entry(template).State = EntityState.Added;   
db.SaveChanges();