2013-05-26 4 views
0

Я пытаюсь создать структуру данных для простого веб-сайта блога в свое свободное время, и я не могу понять, почему я получаю эту ошибку. Я использую EF5 и MVC4. DbContext:Контекст данных не может использоваться во время создания модели. Entity Framework 5

public class KWBlogContext : DbContext 
{ 
    static KWBlogContext() 
    { 
     Database.SetInitializer<KWBlogContext>(null); 
    } 

    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<BlogType> BlogTypes { get; set; } 

etc... 

Я экспериментировал немного с OnModelCreating, но безрезультатно.

DbContext инициализируется по BaseController:

public class BaseController : Controller 
{ 

    public KWBlogContext db; 
    public BaseController() 
    { 
     Database.SetInitializer<KWBlogContext>(null); 
     db = new KWBlogContext(); 
    } 

} 

Я получаю "Послед содержит более одного элемента" ошибка в этой строке в HomeController (реализует BaseController):

vm.Blogs = db.Blogs.Where(x => x.CreatedDate >= subtractDate).OrderBy(x => x.BlogId).ToList(); 
vm.BlogTypes = db.BlogTypes.ToList(); 

И здесь является StackTrace:

[InvalidOperationException: Sequence contains more than one element] 
System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +4078798 
System.Data.Entity.ModelConfiguration.Conventions.<>c__DisplayClass3.<System.Data.Entity.ModelConfiguration.Conventions.IEdmConvention<System.Data.Entity.Edm.EdmEntityType>.Apply>b__0(PropertyInfo p) +187 
System.Data.Entity.ModelConfiguration.Utilities.IEnumerableExtensions.Each(IEnumerable`1 ts, Action`1 action) +194 
    System.Data.Entity.ModelConfiguration.Conventions.DeclaredPropertyOrderingConvention.System.Data.Entity.ModelConfiguration.Conventions.IEdmConvention<System.Data.Entity.Edm.EdmEntityType>.Apply(EdmEntityType entityType, EdmModel model) +185 
    System.Data.Entity.ModelConfiguration.Configuration.EdmConventionDispatcher.Dispatch(TEdmDataModelItem item) +181 
    System.Data.Entity.ModelConfiguration.Configuration.EdmConventionDispatcher.VisitEdmEntityType(EdmEntityType item) +59 
    System.Data.Entity.Edm.Internal.DataModelItemVisitor.VisitCollection(IEnumerable`1 collection, Action`1 visitMethod) +204 
    System.Data.Entity.Edm.Internal.EdmModelVisitor.VisitEntityTypes(EdmNamespace edmNamespace, IEnumerable`1 entityTypes) +89 
    System.Data.Entity.Edm.Internal.EdmModelVisitor.VisitEdmNamespace(EdmNamespace item) +193 
    System.Data.Entity.ModelConfiguration.Configuration.EdmConventionDispatcher.VisitEdmNamespace(EdmNamespace item) +53 
    System.Data.Entity.Edm.Internal.DataModelItemVisitor.VisitCollection(IEnumerable`1 collection, Action`1 visitMethod) +204 
    System.Data.Entity.Edm.Internal.EdmModelVisitor.VisitNamespaces(EdmModel model, IEnumerable`1 namespaces) +89 
    System.Data.Entity.Edm.Internal.EdmModelVisitor.VisitEdmModel(EdmModel item) +130 
    System.Data.Entity.ModelConfiguration.Configuration.EdmConventionDispatcher.VisitEdmModel(EdmModel item) +79 
    System.Data.Entity.ModelConfiguration.Configuration.EdmConventionDispatcher.Dispatch() +36 
    System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ApplyModel(EdmModel model) +136 
    System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) +209 
    System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) +106 
    System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) +143 
    System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) +171 
    System.Data.Entity.Internal.LazyInternalContext.InitializeContext() +499 
    System.Data.Entity.Internal.InternalContext.Initialize() +31 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +39 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +137 
    System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +38 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +84 

Любой вход будет оценен. Я бил головой об этом в течение дня или двух. Заранее спасибо!

EDIT:

Я пришел к выводу, что это также может быть проблемой SQL Server/конфигурации. Я искал в моих Management Studio журналы и наткнулся на:

The SQL Server Network Interface library could not register the SPN for the SQL Server service. [ MSSQLSvc/MachineName:SQLEXPRESS] Windows return code: 0xffffffff, state 63 
Dedicated administrator connection support was not started because it has been disabled on this edition of SQL Server. If you want to use dedicated administrator connection, restart SQL server using the trace flag 7806. 

Вот мой ConnectionString:

<add name="KWBlogContext" connectionString="Data Source=MACHINENAME\SQLEXPRESS;Initial Catalog=KWBlog;Integrated Security=True" providerName="System.Data.SqlClient" /> 

ответ

0

Где-то в вашем коде, вы использовали и условие SingleOrDefault или выражение возвращает более один элемент. Пожалуйста, разместите свой контрольный код для проверки.

+0

Код HomeController, который я разместил, является единственным кодом, вызывающим DbContext, и использует метод ToList(). Он определен в модели представления как открытый IEnumerable Блоги {get; задавать; } – kwinsor5

+0

вы можете отлаживать и посмотреть, что представляет собой запрос EF, который создается при нажатии этой строки 'db.Blogs.Where (x => x.CreatedDate> = subtractDate) .OrderBy (x => x.BlogId). ToList(); ' – Saravanan