2013-04-22 4 views
0

У меня возникла проблема с использованием моей инфраструктуры сущностей и думаю, что это может быть из-за неправильного использования моего контекста БД.Контекст не может использоваться во время создания модели

Время от времени я вижу сообщения об ошибках в своем журнале: «Контекст не может использоваться во время создания модели».

Ошибка не всегда возникает и, кажется, находится на новой загрузке приложения или если я скомпилирую свой проект и обновляю вкладку браузера во время ее компиляции.

Функция, приведенная ниже, является ошибкой и вызывается с моей главной страницы.

public static class UserFunctions 
{ 
    private static peopleSwimmingContext _db = new peopleSwimming.Models.peopleSwimmingContext(); 

    public static String GetUserRole(Int32 UserID) { 

     String returnedRole = String.Empty; 

     var foundUser = _db.Users.Where(w => w.UserId == UserID).FirstOrDefault(); 
     if (foundUser != null) 
     { 
      returnedRole = foundUser.Role.Name; 
     } 
     return returnedRole; 
    } 
} 

Любые советы будут оценены по весу!

О, и вот мой innerstack след:

Внутренний Трассировка стека:

на System.Data.Entity.Internal.LazyInternalContext.InitializeContext() в System.Data.Entity.Internal.InternalContext.Initialize() в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (тип entityType) в System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() at System.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext() в System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() at System.Linq.Queryable.Where[TSource](IQueryable 1 источник, Предикат Expression`1) в peopleSwimming.Logic.UserFunctions.GetUserRole (Int32 UserID) в c: \ svn \ peopleSwim \ peopleSwimming \ Logic \ UserFunctions.cs: строка 18 в peopleS wimming._Home.Page_Load (отправитель объекта, EventArgs e) в c: \ svn \ peopleSwim \ peopleSwimming \ Home.aspx.cs: строка 25 в System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs e) в системе. Web.UI.Control.OnLoad (EventArgs е) в System.Web.UI.Control.LoadRecursive() в System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, булевой includeStagesAfterAsyncPoint)

ответ

3

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

Кроме того, вам не нужен метод Where, вы можете использовать только FirstOrDefault.

public static class UserFunctions 
{ 
    public static String GetUserRole(Int32 UserID) 
    { 
     using (peopleSwimmingContext _db = new peopleSwimming.Models.peopleSwimmingContext()) 
     { 
      String returnedRole = String.Empty; 

      var foundUser = _db.Users.FirstOrDefault(w => w.UserId == UserID); 

      if (foundUser != null) 
      { 
       returnedRole = foundUser.Role.Name; 
      } 

      return returnedRole; 
     } 
    } 
} 
+0

Благодарим за информацию о операторах where в первом или по умолчанию и использовании блоков. Я изменил эту функцию, чтобы использовать блок использования, поэтому, надеюсь, я увижу ошибку реже! – L2wis

+0

Вы видели это реже? –

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