У меня есть много-много отношений для диска Google, где папка может иметь много родительских папок и файлов и папок внутри. Как я правильно вставляю в свой элемент db, где уже существует родительская папка, здесь я получаю ошибку повторяющегося значения. Im использует FE 6.0v.Как в linq для сущностей, многие для многих добавляют ссылку
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();
}
EDIT, добавил код
добавили это прежде alocating новый parrent двутавровых получить ошибку. 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();
Тем не менее, получить дубликат ошибки
EDIT 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();
}
Я знаю это, но GoogleParents - это список и только добавляет. Attach i можно использовать только непосредственно в базе данных. Я не знаю, как установить прикрепление или неизмененный объект, который является частью объекта, потому что он хранится в списке. – sinofis
@sinofis, вы добавляете новый документ, содержащий ссылку на существующий объект. Вы должны убедиться, что ваши существующие объекты отслеживаются контекстом в правильном состоянии, т.е. 'Unchanged'. –
отредактировал мой ответ с вашим кодом, все еще получая дубликаты – sinofis