Я использую первую модель кода EF6 с ленивой загрузкой. У меня есть один обычный проект (ASP.NET MVC) и один с тестами для него. Я создаю в init (drop exsists before) обычную базу данных для тестирования (без насмешек). Я использую тот же инициализатор в обоих проектах (и для поиска проблемы я пытаюсь использовать тот же connectionString для создания контекста).Entity Framework 6-ленивая загрузка ожидать пустую коллекцию, но возвращает null (только в тесте)
Когда я использую свойство, ведьма - это коллекция (данные из другой таблицы) без элементов, только в обычном проекте ef send sql request (я использую SQL Server Profiler для проверки), в тестировании проекта это свойство всегда равно нулю. Если сбор не пуст, он работает правильно в обоих случаях.
Это простая версия моего кода (пожалуйста скажите, если вам нужно STH больше, я не имеют понятия, где находится ошибка): модели данных:
public class Story
{
public int Id { get; set; }
public virtual ICollection<Comment> Comments { get; set; }
}
public class Comment
{
public int Id { get; set; }
[Index("CommentClusteredIndex_StoryId", IsClustered = true)]
public int StoryId { get; set; }
public virtual Story Story { get; set; }
}
Web.config (проект), приложение .config (тесты):
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="StoriesEntitiesTestContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=StoriesEntitiesTestDb;Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
это, как я использовал его - код exsist в нормальном проекте (это один без тестов):
public void Method(DbContext context)
{
DbSet<Story> _dbSet = context.Set<Story>();
var a = dbSet.First().Comment; //when Comment doesn't have items a is null in testing project and empty collection in normal project
}
Спасибо, это работает отлично :) Но вы можете объяснить мне, почему в основном проекте эф возвращает пустую коллекцию без конструктора? – user3232354