我一直在尝试遵循本教程... http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model -for-an-asp-net-mvc-application 但我不断收到以下错误...
system.invalidoperationException = {"设置数据库失败 'WeddingPreparations.Dal.WeddingInitializer 类型的初始值设定项, KevinLisaWedding' 用于 DbContext 类型 应用程序中指定的“WeddingPreparations.Dal.WeddingContext” 配置。有关详细信息,请参阅内部异常。"}
内部例外是...
{“无法从以下位置加载类型“WeddingPreparations.Dal.WeddingContext” 程序集'EntityFramework,版本= 6.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089'.":"WeddingPreparations.Dal.WeddingContext"}
堆栈跟踪是...
at System.Data.Entity.Internal.InitializerConfig.TryGetInitializer(Type requiredContextType, String contextTypeName, String initializerTypeName, Boolean isDisabled, Func`1 initializerArgs, Func`3 exceptionMessage)
at System.Data.Entity.Internal.InitializerConfig.<>c__DisplayClass6.<TryGetInitializerFromEntityFrameworkSection>b__1(ContextElement e)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Data.Entity.Internal.InitializerConfig.TryGetInitializerFromEntityFrameworkSection(Type contextType)
at System.Data.Entity.Internal.InitializerConfig.TryGetInitializer(Type contextType)
at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetServiceFactory(Type type, String name)
at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 t)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetService(Type type, Object key)
at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.GetService(Type type, Object key)
at System.Data.Entity.Infrastructure.DependencyResolution.CompositeResolver`2.GetService(Type type, Object key)
at System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetService(IDbDependencyResolver resolver, Type type)
at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator()
at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at KevinLisaWedding.Controllers.HomeController.Index() in c:\Users\kdonde\Documents\Visual Studio 2013\Projects\KevinLisaWedding\KevinLisaWedding\Controllers\HomeController.cs:line 14
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.ActionInvocation.InvokeSynchronousActionMethod()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Async.AsyncResultWrapper.End[TResult](IAsyncResult asyncResult, Object tag)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e()
我还到处搜索了为什么我会收到此错误,但没有任何运气,并且我下载了完成的项目并将其与我的进行比较,但没有任何运气。
我当前的代码如下。
在 WeddingPreparations 项目中...
namespace WeddingPreparations.Dal
{
public class WeddingContext : DbContext
{
public WeddingContext()
: base("WeddingContext")
{
}
// Any entities reference by this class will be implicitly included.
public DbSet<Invitee> Invitees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//base.OnModelCreating(modelBuilder);
}
}
}
和
namespace WeddingPreparations.Dal
{
public class WeddingInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<WeddingContext>
{
protected override void Seed(WeddingContext context)
{
//base.Seed(context);
var invitees = new List<Invitee>
{
new Invitee{ FirstName= "FName1", LastName= "LName1", Attending = true, HotelRoomRequired= true, Notes="I'm the groom! :)"},
new Invitee{ FirstName= "FName2", LastName= "LName2", Attending = true, HotelRoomRequired= true, Notes="I'm the bride! :)"}
};
invitees.ForEach(i => context.Invitees.Add(i));
context.SaveChanges();
}
}
}
我在这个项目中的模型如下
namespace WeddingPreparations.Models
{
public class Invitee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Attending { get; set; }
public bool HotelRoomRequired { get; set; }
public string Notes { get; set; }
}
}
在mvc项目中我有以下web.config文件...
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<connectionStrings>
<add name="WeddingContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=WeddingInvites;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Ninject" publicKeyToken="c7192dc5380945e7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
<entityFramework>
<contexts>
<context type="WeddingPreparations.Dal.WeddingContext">
<databaseInitializer type="WeddingPreparations.Dal.WeddingInitializer, KevinLisaWedding" />
</context>
</contexts>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework" >
<parameters>
<parameter value="v11.0"/>
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
在我的家庭控制器中,我正在执行以下代码......
WeddingPreparations.Dal.WeddingContext ctx = new WeddingPreparations.Dal.WeddingContext();
var x = ctx.Invitees.ToList();
如果我没有弄错的话,它应该创建数据库,并用初始化程序中指定的数据作为种子...但是我得到的只是该错误,我似乎无法弄清楚...任何方向都是赞赏。
我尝试将项目重新创建为一个项目,就像他们在教程中所做的那样,但我仍然遇到相同的错误。肯定缺少一些代码......要么我错过了......或者教程只是没有它。
在您的
web.config
文件中,您有以下内容:
<contexts>
<context type="WeddingPreparations.Dal.WeddingContext">
<databaseInitializer type="WeddingPreparations.Dal.WeddingInitializer, KevinLisaWedding" />
</context>
</contexts>
这表示在名为
WeddingPreparations.Dal.WeddingInitializer
的程序集中查找名为 KevinLisaWedding
的类。由于您的程序集名为 WeddingPreparations
,因此您需要将配置更改为:
<contexts>
<context type="WeddingPreparations.Dal.WeddingContext, WeddingPreparations">
<databaseInitializer type="WeddingPreparations.Dal.WeddingInitializer, WeddingPreparations" />
</context>
</contexts>
我在相同的教程中遇到了同样的问题。 Initializer 类未添加到项目中。将其添加到项目文件中或在解决方案资源管理器中右键单击并单击“包含”