C #Entity Framework с linq возвращает нулевую ссылку

У меня проблема с сущностью в 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;
}
7
задан user1548072 25 July 2012 в 09:01
поделиться