Я столкнулся с вопросом о странной проблеме, используя последнюю версию 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);
}
Что такое 'FolderManager', и как он получает экземпляр' Folder'? –
[Избегайте вставки тегов в заголовки] (http://stackoverflow.com/help/tagging) – BCdotWEB
См. Мой обновленный вопрос. – Complexity