实体框架代码类库第一篇。数据上下文和初始化程序类,我相信它是常规的样板代码。我在我的MVC3应用程序中引用了该类,并在Global.asax中设置了初始化程序。在运行应用程序时,我注意到以下问题1.数据库没有在任何地方创建(然后我在web.config中为名为Context类的连接字符串添加了一个条目,仍然没有结果)2.当我尝试访问初始值,我得到一个空错误,显然是因为没有数据。任何人都可以帮助我指导如何让你的工作(如果我整个圣诞节都研究这个但我仍然无法让它工作,那将是一种耻辱:()谢谢ps我尝试插入断点并且我点击了应用初始化方法,但它从来没有在初始化程序中使用Seed方法,即使我在那里添加了一个断点!谢谢。初始化类usingSystem;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Data.Entity;使用F2AController.Models;namespaceF2AController.DataObjects{publicclassF2AInitializer:DropCreateDatabaseAlways{protectedoverridevoidSeed(F2AContextcontext){varcountries=newList{newCountry(){CountryName="德国",Active=true},newCountry(){CountryName="英国",Active=true}};countries.ForEach(s=>context.Countries.Add(s));context.SaveChanges();varproviders=newList(){newProviders(){ProviderName="InfoBip",ContactDetails="RturoManovic",Active=true,MessageRates=newList(){newProviderRates(){CountryId=1,DateCreated=DateTime.现在,DateModified=DateTime.Now,Rate=0.05M,Active=true}}}};providers.ForEach(p=>context.Providers.Add(p));context.SaveChanges();varusermobiles=newList(){newMobileTerminal(){Active=true,Credits=200,DateCreated=DateTime.Now,MSISDN="4477565444865"}};usermobiles.ForEach(u=>context.MobileTerminals.Add(u));context.SaveChanges();}}}上下文类usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;使用System.Data.Entity;命名空间F2AController.Models{publicclassF2AContext:DbContext{publicDbSetCountries;publicDbSetMobileTerminals;publicDbSetProviders;publicDbSetProviderRates;publicDbSetProperties;publicDbSetShortMessages;publicDbSetUserProperties;protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){base.OnModelCreating(modelBuilder);}}}Global.asaxApp初始化方法protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();Database.DefaultConnectionFactory=newSqlConnectionFactory(ConfigurationManager.ConnectionStrings["F2AContext"].ConnectionString);Database.SetInitializer(newF2AInitializer());RegisterGlobalFilters(GlobalFilters.Filters);RegisterRoutes(RouteTable.Routes);}尤里卡……终于!在寻找解决方案时,我遇到了这个postEntityFrameworkDatabase.SetInitializernotworkingatall应用那里建议的解决方案以强制我的数据库创建像我预期的那样在启动时工作,但是在运行种子代码时,它抛出Gettinganullpointerexception在调查过程中,我意识到任何从Context类引用DBSet集合的尝试都会产生相同的异常。在进一步检查中我意识到,而不是使用publicDbSetMobileTerminals{get;放;我曾经使用过publicDbSetMobileTerminals;这意味着我没有得到任何隐式对象初始化,因此出现空指针异常。我删除了强制初始化代码并再次运行该应用程序,这次种子代码直到我访问了一个实际查询数据上下文的页面并且它运行良好时才运行。显然,由于延迟加载,初始化代码直到实际需要时才会运行,即在应用程序中第一次查询数据上下文时。我希望这可以帮助将来遇到同样问题的人。我第一次使用类库代码时想到了另一个问题,偶然发现了这篇文章。我在代码库项目中有代码优先POCO和DataContext类,并想使用该项目创建我的代码优先数据库。我发现有一个-ProjectName标志来指定在创建数据库时要查找的类库项目。add-migration-Name'InitialCreate'-ProjectName'MyProject.Data'update-database-ProjectName'MyProject.Data'问题可能是您在web.config中使用的连接字符串。将以下内容用于SQLCE将以下内容用于SQLExpress我认为这应该可以正常工作。另外,我认为您应该看看这篇文章EFCodeFirstDBInitializationUsingWeb.Config。最好从web.config而不是global.asax文件初始化数据库。以上就是C#学习教程:实体框架代码类库的第一篇分享内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
