我有一个google驱动器的多对多关系,其中文件夹中可以有许多父文件夹和文件和文件夹。如何在我的数据库项目中正确地插入父文件夹已经存在的位置,这里我得到了重复值错误。即时通信使用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 would a error之前添加了这个。AcceptChanges无法继续,因为该对象的键值与ObjectStateManager中的另一个对象冲突。在调用AcceptChanges之前,请确保键值唯一。
GoogleParent gParent = OAuthDBGoogleDrive.getParent(parent.Id);
if (gParent != null)
gDoc.GoogleParents.Add(gParent);
在im保存到数据库时添加了这个
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();
}
发布于 2013-05-29 23:06:30
通常,您将DbSet.Attach()
数据库中已存在的实体和数据库中不存在的DbSet.Add()
实体。这两个函数分别将实体附加到处于Unchanged
或Added
状态的上下文。如果对象图中的所有实体尚未被上下文跟踪,则它们也会以此状态添加。
因此,如果单个实体处于不正确的跟踪状态,则可能需要更改该实体的跟踪状态。这可以按如下方式完成:
// eg give the entity the unchanged state
context.Entry(myEntity).State == EntityState.Unchanged;
https://stackoverflow.com/questions/16825309
复制相似问题