Я использую EF 7 (beta6-13679) в веб-приложении MVC 6 (только dnx 4.5.1 из-за необходимости интеграции с AD), с базовым подходом базы данных и не может получить таблицу саморекламы, чтобы вернуть значение правильно, я всегда получаю null при запуске моего приложения, однако LINQPad находит и работает с родительским/детьми просто отлично. Удивление, возможно, у меня что-то не так, или, может быть, это ошибка в новом EF. Надеясь, что кто-то может дублировать проблему или, еще лучше, решить ее. :) Извинения за невозможность вставить изображения, пока не позволяют.Entity Framework 7 self referencing table return null
Вот модель:
public partial class Directories
{
public Directories()
{
Directory_ACL_Entries = new HashSet<Directory_ACL_Entries>();
Files = new HashSet<Files>();
}
public long Directory_ID { get; set; }
public DateTime Created { get; set; }
public DateTime Discovery_TS { get; set; }
public string Hash { get; set; }
public bool Hidden { get; set; }
public long? Parent_Directory_ID { get; set; }
public string Path { get; set; }
public virtual ICollection<Directory_ACL_Entries> Directory_ACL_Entries { get; set; }
public virtual ICollection<Files> Files { get; set; }
public virtual Directories Parent_Directory { get; set; }
public virtual ICollection<Directories> InverseParent_Directory { get; set; }
}
Вот EF беглый код:
modelBuilder.Entity<Directories>(entity =>
{
entity.HasKey(e => e.Directory_ID);
entity.HasIndex(e => e.Hash).HasName("UK_Directories").IsUnique();
entity.Property(e => e.Created).HasColumnType("datetime");
entity.Property(e => e.Discovery_TS).HasColumnType("datetime");
entity.Property(e => e.Hash)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.Path).IsRequired();
entity.HasOne(d => d.Parent_Directory).WithMany(p => p.InverseParent_Directory).HasForeignKey(d => d.Parent_Directory_ID);
});
Это был сгенерирован автоматически с помощью перепроектируете подмости с помощью следующей команды:
dnx ef dbcontext scaffold "Server=serverName\SQLEXPRESS;Database=dbName;Trusted_Connection=True;" EntityFramework.MicrosoftSqlServer --outputDir Models
LINQPad показывает родительское значение, возвращаемое правильно: LINQPad showing parent and children
Visual Studio Возвращение Null: VS returning null
Глядя [this] (https://github.com/aspnet/EntityFramework/issues/3312), похоже, что в EF7 не поддерживается ленивая загрузка. Вам нужно будет использовать метод Include(). – bazz
Это действительно проблема. При желании загружать столбцы с самоначислением в следующем формате: .Include (table => table.selfReference) – ViOTeK
обратите внимание на производительность! EF7 не очень оптимизирован. Я понижаю свой проект (от 7 rc1 до 6.3.1), потому что выступления очень плохие – Amine