2014-10-04 40 views
0

我正在学习带有entityframework的asp.net mvc。我从一个虚拟项目开始。我正在开发一个实践的博客。我有一个与代码第一个EntityFramework相关的问题。在开始的时候我在我的表如何在代码第一个实体框架项目中插入新的实体类而不影响数据库中的数据

在这里创建了输入用户信息一个实体类是我创建

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MVCDairy.Models 
{ 
    public class UserDetails 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
     public string Place { get; set; } 
    } 
} 

我在表中插入几个值的类。在我的下一步中,我为博客文章添加了一个实体类。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
namespace MVCDairy.Models 
{ 
    public class BlogPost 
    { 
     [Key] 
     public int BlogId { get; set; } 
     public int PostedBy { get; set; } 
     public string BlogTitle { get; set; } 
     public string BlogDescription { get; set; } 
     public DateTime PostDate { get; set; } 
    } 
} 

我在我的上下文类中使用DropCreateDatabaseIfModelChanges。

public class Context:DbContext 
{ 
    public Context() 
    { 
    Database.SetInitializer<Context>(new DropCreateDatabaseIfModelChanges<Context>()); 
    } 

    public DbSet<UserDetails> Users {get;set; } 
    public DbSet<BlogPost> Blogs { get; set; } 
} 

但是这个初始化器从我的所有表中删除所有记录,我必须为每个表再次输入值。有没有什么好的方法来插入不影响我的表条目的新实体类。

回答

0

你可以用另一初始化程序像MigrateDatabaseToLatestVersion或者你可以使用CreateDatabaseIfNotExists(这不会反映最近的变化虽然)

你需要在迁移配置通过除上下文。

详见this url on msdnMigrateDatabaseToLatestVersion

0

启用Migrations您的机型,您可以通过下面的命令做在Power Manager Console

PM>Enable-Migrations 

需要注意的是,你应该选择包含DbContext项目。

每次您更改模型(添加或更新或删除实体或更改关系或...) 您可以在不使用下面的命令失去你的数据更新数据库时间:

PM>Add-Migration [a name for your migration] 
PM>Update-Database 

如果您想与Ignorechanges开关添加迁移现有数据库,然后使用它:

PM>Add-Migration [a name for your migration] -IgnoreChanges 

您可以在this link找到更多关于EF迁移命令。

迁移后启用,EF在项目中创建一个Configuration类,那么你可以设置你的DbContext初始化程序如下: 你可以设置你DbContext初始化程序为:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, 
                Configuration>()); 
相关问题