У меня проблема с сущностью в C #. У меня есть 2 сущности, User и UserRole. Они связаны отношениями User *->1 UserRole
Всякий раз, когда я использую этот запрос в функции:
User user = context.User.Where(i => i.id == id).FirstOrDefault();
return user.UserRole.accessLevel;
Запрос возвращает пользователя, но UserRole имеет значение null. В таблице User есть roleId, связанный с идентификатором UserRole, и значение roleId при отладке правильное, хотя сущность UserRole имеет значение null. Это странно, как никогда раньше не было...
Я уже убедился, что мои отношения в модели и базе данных верны. У меня есть правильные строки, добавленные в базу данных.
РЕДАКТИРОВАТЬ:
Извините, я должен был упомянуть, что использую собственный тестируемый контроллер базы данных :
public class DBController : IUnitOfWork
{
readonly ObjectContext context;
const string ConnectionStringName = "MarketPlaceDBEntities";
public DBController()
{
var connectionString =
ConfigurationManager
.ConnectionStrings[ConnectionStringName]
.ConnectionString;
context = new ObjectContext(connectionString);
}
public void Commit()
{
context.SaveChanges();
}
public IObjectSet<Category> Category
{
get { return context.CreateObjectSet<Category>(); }
}
public IObjectSet<ItemComment> ItemComment
{
get { return context.CreateObjectSet<ItemComment>(); }
}
public IObjectSet<ItemRating> ItemRating
{
get { return context.CreateObjectSet<ItemRating>(); }
}
public IObjectSet<Item> Item
{
get { return context.CreateObjectSet<Item>(); }
}
public IObjectSet<ItemSale> ItemSale
{
get { return context.CreateObjectSet<ItemSale>(); }
}
public IObjectSet<ItemScreenshot> ItemScreenshot
{
get { return context.CreateObjectSet<ItemScreenshot>(); }
}
public IObjectSet<UserRole> UserRole
{
get { return context.CreateObjectSet<UserRole>(); }
}
public IObjectSet<User> User
{
get { return context.CreateObjectSet<User>(); }
}
}
. И я делаю операции через него. Может быть, это как-то связано с моей проблемой.
interface IUnitOfWork
{
IObjectSet<Category> Category { get; }
IObjectSet<ItemComment> ItemComment { get; }
IObjectSet<ItemRating> ItemRating { get; }
IObjectSet<Item> Item { get; }
IObjectSet<ItemSale> ItemSale { get; }
IObjectSet<ItemScreenshot> ItemScreenshot { get; }
IObjectSet<UserRole> UserRole { get; }
IObjectSet<User> User { get; }
void Commit();
}
У меня все это работало раньше, но я не знаю, почему это пошло не так..
РЕДАКТИРОВАТЬ2:
Решено! Спасибо, РикоСутер.
Включение ленивой загрузки в конструкторе моего контроллера БД решило проблему. Я думал, что он уже включен, потому что в модели базы данных для него установлено значение true, но похоже, что при создании нового контекста вам нужно снова включить его вручную.
public DBController()
{
var connectionString =
ConfigurationManager
.ConnectionStrings[ConnectionStringName]
.ConnectionString;
context = new ObjectContext(connectionString);
context.ContextOptions.LazyLoadingEnabled = true;
}