Сначала я заметил проблему с кодом EF 6.1. У меня есть следующие классы:Entity Framework 6.1 - код first - свойства справки не загружаются правильно
namespace Domain
{
public interface ISupportsOptimisticConcurrency
{
byte[] RowVersion { get; set; }
}
public class Entity : ISupportsOptimisticConcurrency
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
public class Lookup : Entity
{
public Lookup()
{
Description = string.Empty;
}
[Required]
[MaxLength(100)]
public string Name { get; set; }
[MaxLength(300)]
public string Description { get; set; }
}
public class GroupType : Lookup
{
}
public class Group:Entity
{
public Group()
{
GroupType = new GroupType();
}
[Required]
public string Name { get; set; }
[Required]
public Guid ExternalId { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string MonitorEmail { get; set; }
public string UrlRequestEmail { get; set; }
public bool UsesDefaultOptions { get; set; }
[ForeignKey("GroupType")]
public int GroupTypeId { get; set; }
public virtual GroupType GroupType { get; set; }
}
}
Я написал типичный класс репозитория для доступа к данным из БД. Теперь, когда я пытаюсь найти группу по идентификатору и включаю тип GroupType, тип GroupType не загружается должным образом, а свойство Name для GroupType имеет значение null.
Интересно, когда я удалил конструктор группы, который инициализирует новый тип GroupType, все начинает работать нормально.
Не могли бы вы объяснить это поведение? Примечание. Этот же сценарий отлично работает с NHibernate, как есть.
Спасибо за ответы.
Если бы я должен был угадать, я бы сказал, что имеет какое-то отношение к наследованию (и нескольким не абстрактным типам). Для GroupType нет дополнительных свойств, поэтому дискриминатор, вероятно, путается. «Entity», вероятно, должен быть «абстрактным» для начинающих, а затем работать над определением или объявлением дискриминатора для «Lookup» и «GroupType». –
Вероятно, что происходит, EF видит, что уже существует GroupType, поэтому он не создает новый экземпляр. Почему у вас есть экземпляр конструктора GroupType? Вы объединяете его с возможностями навигации для коллекции? Те получают экземпляр в конструкторе, но свойства уникальной ссылочной навигации не допускаются. –