Mik*_*ike 15 ef-code-first entity-framework-4.1
我在我的开发框上有一个名为ApplicationName_Development的数据库在SQL Server 2008 R2 Developer Edition上运行.
我没有问题地将.NET成员资格表添加到数据库中.当我试图让Code First工作时,我收到以下错误消息:
服务器遇到处理请求的错误.异常消息是"无法检查模型兼容性,因为数据库不包含模型元数据.请确保已将IncludeMetadataConvention添加到DbModelBuilder约定中.
经过一些谷歌搜索,我发现我必须删除数据库,让EF创建数据库.这没关系,但我丢失了所有的.NET会员表.我可以返回并再次添加成员资格表,但如果我的模型更改并且EF需要重新创建数据库,那么我必须再次添加成员资格表.
我该如何解决这个问题?
这是代码优先工作的方式.代码的主要思想首先是不要触摸数据库,因为创建数据库是模型的责任.如果要自定义数据库,则必须创建自定义IDatabaseInitializer并添加自定义SQL.
public class MyDbInitializer : DropCreateDatabaseIfModelChanges<MyContext>
{
protected override void Seed(MyContext context)
{
// Here run your custom SQL commands
context.Database.ExecuteSqlCommand("CREATE TABLE ....");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您只需在应用程序启动时设置cutom intializer:
Database.SetInitializer<MyContext>(new MyDbInitializer());
Run Code Online (Sandbox Code Playgroud)
如果您不想这样做,则必须手动维护数据库并将初始化程序设置为null.
在这里找到了更简单的解决方法 我希望这有帮助.
http://www.paragm.com/ef-v4-1-code-first-and-asp-net-membership-service/
另一种选择可能是使用System.Web.Management命名空间.我在下面的代码中取得了很大的成功:
string connectionString = ConfigurationManager.ConnectionStrings["MyDatabaseContext"].ConnectionString;
string database = "MyDatabaseName";
SqlServices.Install(database, SqlFeatures.All, connectionString);
Run Code Online (Sandbox Code Playgroud)
它只会创建数据库,之后您可以使用标准成员资格API添加用户.
| 归档时间: |
|
| 查看次数: |
32185 次 |
| 最近记录: |