2014-11-14 5 views
0

Я столкнулся с вопросом о странной проблеме, используя последнюю версию Entity Framework, касающуюся свойств навигации.Свойства навигации не работают должным образом

У меня есть объект, у которого у меня есть несколько необходимых свойств навигации, которые отмечены как виртуальные. Смотрите мой Entities класс ниже:

public class Folder : UserReferencedEntityBase<int> 
{ 
    #region Constructors 

    public Folder() 
    { } 

    public Folder(IUnitOfWork unitOfWork) 
     : base(unitOfWork) 
    { 
     ParentFolder = unitOfWork.Context.GetCurrentFolder as Folder; 
    } 

    #endregion 

    #region Properties 

    [Required] 
    public string Name { get; set; } 

    [Required] 
    public string Data { get; set; } 

    [Column(Order = 998)] 
    public Folder ParentFolder { get; set; } 

    [Required] 
    public bool IsPublished { get; set; } 

    #endregion 
} 

Это одна наследуется от UserReferencedEntityBase{T} который выглядит как:

public class UserReferencedEntityBase<TKey> : EntityBase<TKey> 
{ 
    #region Constructors 

    public UserReferencedEntityBase() { } 

    public UserReferencedEntityBase(IUnitOfWork unitOfWork) 
    { 
     unitOfWork.ThrowIfNull("unitOfWork"); 

     CreatedBy = unitOfWork.Context.GetCurrentUser; 
    } 

    #endregion 

    #region Properties 

    [Required] 
    [Column(Order = 996)] 
    public virtual IdentityUser CreatedBy { get; set; } 

    [Column(Order = 997)] 
    public virtual IdentityUser UpdatedBy { get; set; } 

    #endregion 
} 

Теперь у меня есть свой сайт MVC, где я загружаю объект, обновление недвижимости и сэкономить его в базе данных снова:

var model = new FolderManager(UnitOfWork).GetFolder(id); 
model.IsPublished = true; 
UnitOfWork.Commit(); 

Я использую пользовательскую единицу работы здесь, но никакой ракеты вообще нет. Все, что происходит с тем же контексте, в рамках одной и той же просьбой, не асинхронной не называет ...

Когда я выполнить код, я получаю:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Глядя на это, показывает следующее сообщение об ошибке:

"The CreatedBy field is required."

Теперь, странно это, когда я отладки мой код, 3 линии, приведенные выше, свойство CREATED_BY заполняется и код действительно выполняться без каких-либо проблем.

Я использую платформу идентификации ASP.NET, таким образом используя IdentityDbContext в случае, если это имеет значение.

У кого-нибудь есть ключ?

Сердечные приветы

ОБНОВЛЕНИЕ - Менеджер папок

менеджер просто обертка, чтобы получить мое содержимое из моей единицы работы:

public Folder GetFolder(int id) 
{ 
    return UnitOfWork.FolderRepository.GetByFilter(x => x.Id == id); 
} 

Метод GetByFilter строится как :

public virtual TEntity GetByFilter(Func<TEntity, bool> filter) 
{ 
    DbSet.ThrowIfNull("DbSet"); 

    if (OnBeforeEntityGet != null) 
    { OnBeforeEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); } 

    if (OnEntityGet != null) 
    { OnEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); } 

    return !Entities.Any() ? null : !Entities.Where(filter).Any() ? null : Entities.First(filter); 
} 
+0

Что такое 'FolderManager', и как он получает экземпляр' Folder'? –

+1

[Избегайте вставки тегов в заголовки] (http://stackoverflow.com/help/tagging) – BCdotWEB

+0

См. Мой обновленный вопрос. – Complexity

ответ

0

Просто хочу сообщить, что я нашел решение. Кажется, что когда вы загружаете объект, который содержит виртуальные свойства, но не проверяя их, они остаются пустыми, и поэтому код не работает.

С отладчиком прилагается, он работает flaslessy после проверки этого элемента.

Это нормальное поведение?

С уважением,

Смежные вопросы