我与谷歌驱动器有多对多关系,其中文件夹可以有许多父文件夹以及文件和文件夹。如何在父文件夹已经存在的地方正确插入我的数据库项目,这里我得到重复值错误。我使用的是 FE 6.0v。
var gDoc = new GoogleDoc();
///
do some entity stuff
///
foreach (ParentReference parent in input.Parents)
{
var gParent = new GoogleParent();
///
do some entity stuff
///
gDoc.GoogleParents.Add(gParent);
}
using (Model2Container dBase = new Model2Container())
{
dBase.GoogleDocs.Add(gDoc);
dBase.SaveChanges();
}
编辑,添加了一些代码
在分配 i 的新父母之前添加此内容会出错。AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。在调用 AcceptChanges 之前确保键值是唯一的。
GoogleParent gParent = OAuthDBGoogleDrive.getParent(parent.Id);
if (gParent != null)
gDoc.GoogleParents.Add(gParent);
当我保存到数据库时添加了这个
dBase.GoogleDocs.Add(gDoc);
foreach (GoogleParent parent in gDoc.GoogleParents)
{
GoogleParent gparent = dBase.GoogleParents.SingleOrDefault(s => s.Id == parent.Id);
if (gparent != null)
dBase.Entry(gparent).State = System.Data.Entity.EntityState.Unchanged;
}
dBase.SaveChanges();
仍然出现重复错误
编辑2:这似乎工作
using (Model2Container dBase = new Model2Container())
{
var gDoc = new GoogleDoc();
///
do some entity stuff
///
foreach (ParentReference parent in input.Parents)
{
GoogleParent gParent = OAuthDBGoogleDrive.getParent(parent.Id);
if (gParent != null)
{
gDoc.GoogleParents.Add(gParent);
dBase.GoogleParents.Attach(gParent);
}
else
{
gParent = new GoogleParent();
///
do some entity stuff
///
gDoc.GoogleParents.Add(gParent);
}
}
dBase.GoogleDocs.Add(gDoc);
dBase.SaveChanges();
}