Я использую Entity Framework 6 и sqlite для хранения и извлечения некоторых данных. Когда выполняется следующий блок кода, исключение вызывается на db.SaveChanges()
.Первичный ключ сущности Entity Framework
using (var db = new RepoDatabase(DBPath))
{
var folder1 = new Folder
{
Name = "name1",
Subtitle = "subtitle",
ParentFolder = null,
IsHidden = false,
IsSimple = true,
QueryOrFilePath = "query"
};
var folder2 = new Folder
{
Name = "name2",
Subtitle = "subtitle",
ParentFolder = folder1,
IsHidden = false,
IsSimple = true,
QueryOrFilePath = "query"
};
db.Folders.Add(folder1);
db.Folders.Add(folder2);
db.SaveChanges();
}
Исключение:
'System.Data.Entity.Infrastructure.DbUpdateException' произошло в EntityFramework.dll
Дополнительная информация: Не удалось определить основной конец «RhythmRepository.Folder_ParentFolder отношения. Несколько добавленных объектов могут иметь один и тот же первичный ключ.
С моей точки зрения, эта проблема часто возникает, когда идентификатор используется непосредственно для внешних ключей, но это, похоже, не так, поскольку тип «ParentFolder» - это «Папка».
Тип папки устанавливается на автоприращение в базе данных, и имеет атрибут:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
Основная структура сущность:
class Folder
{
#region database fields
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int FolderID { get; set; }
public string Name { get; set; }
public string Subtitle { get; set; }
[ForeignKey("FolderID")]
public Folder ParentFolder { get; set; }
public bool IsHidden { get; set; }
public bool IsSimple { get; set; }
public string QueryOrFilePath { get; set; }
#endregion
}
И SQL-запрос для создания таблицы:
CREATE TABLE IF NOT EXISTS Folders
(
FolderID INTEGER PRIMARY KEY AUTOINCREMENT,
Name varchar(255) NOT NULL,
Subtitle varchar(255) NULL,
ParentFolderID INT NULL,
IsHidden BIT NOT NULL,
IsSimple BIT NOT NULL,
QueryOrFilePath varchar(255) NOT NULL,
FOREIGN KEY (ParentFolderID) REFERENCES Folders(FolderID)
);
Что такое отображение для самостоятельной записи Папка-родительская папка? В индивидуальном порядке ПК используется как FK, и это не может работать в этом случае по очевидным причинам. – DevilSuichiro
Это отношение к многим. Папки имеют ссылки на своих родителей, и многие папки могут совместно использовать одного и того же родителя. – maboesanman
Стоит разделить структуру сущности и как вы определили сопоставления отношений. – Venky