Я пытаюсь создать первые объекты первого кода EF в базе данных. К сожалению при попытке сохранить мои объекты в БД я получаю это исключение:Первая ошибка кода Entity Framework с объектами саморегуляции
Невозможно определить действительный заказ на зависимые операции. Зависимости могут существовать из-за ограничений внешнего ключа, для моделей или для хранения значений.
Вот код, который я использую для заполнения БД:
using (var context = new MySample.Context())
{
context.Database.CreateIfNotExists();
CloudFile f = new CloudFile(, "file1");
CloudDirectory d = new CloudDirectory(CloudObject.CloudContentType.Customer, "directory1");
d.Nodes.Add(d);
FileGroup g = new FileGroup();
g.CloudObjects.Add(d);
context.FileGroups.Add(g);
context.SaveChanges();
}
На самом деле я хотел бы создать объект типа FileGroup
. Этот объект содержит файлы (CloudFile
) или каталоги (CloudDirectory
). Каталоги могут содержать либо другие каталоги, либо файлы.
Вот классы для указанных объектов:
public class FileGroup {
public FileGroup()
{
CloudObjects = new HashSet<CloudObject>();
}
public int FileGroupId { get; set; }
public string Name { get; set; }
public virtual ICollection<CloudObject> CloudObjects { get; set; }
}
public abstract class CloudObject {
public CloudObject(string name)
{
Name = name;
}
public int CloudObjectId { get; set; }
public string Name { get; set; }
public abstract bool hasChildren { get; }
public int? ParentId { get; set; }
public virtual Node Parent { get; set; }
public int? FileGroupId { get; set; }
public virtual FileGroup FileGroup { get; set; }
}
public class CloudDirectory : CloudObject {
public CloudDirectory(string name) :base(name)
{
Nodes = new HashSet<CloudObject>();
}
public override bool hasChildren
{
get
{
return Nodes.Any();
}
}
public virtual ICollection<CloudObject> Nodes { get; set; }
}
public class CloudFile : CloudObject {
public CloudFile(string name) : base(name)
{
}
public string ETag { get; set; }
public override bool hasChildren
{
get
{
return false;
}
}
}
Любая идея, что мне нужно изменить в своих объектах, так что они могут быть сохранены успешно делать DB?
Что такое '' Node' здесь публичный виртуальный узел Parent {получить; задавать; } '? –