2016-11-25 58 views
0

我想教自己的asp.net mvc,我不知道如何做dbcontext類的正確設置。數據庫上下文類的正確設置?

首先我在我的項目上安裝了實體框架。 然後,我創建了一個模型看起來像這樣:

public class Post 
    { 
     public int PostId { get; set; } 

     public string Title { get; set; } 

     public string Content { get; set; } 

     public Post(int PostId, string Title, string Content) 
     { 
      this.PostId = PostId; 
      this.Title = Title; 
      this.Content = Content; 
     } 

後來我創造了Models文件夾中的一類,稱爲ClassAppContext.cs和創造它,我做了一個enable-migrations,這裏是這個類的樣子後:

public class ClassAppContext : DbContext 
    { 
     public DbSet<Post> Posts { get; set; } 

    } 

有人可以告訴我,如果我的方法是正確的,如果不是,我做錯了什麼?

另外,如何從這些類創建數據庫,雖然它是自動生成的,但我在項目中看不到數據庫。

+1

[使用MVC 5開始使用實體框架6代碼優先](https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an -entity-framework-data-model-for-an-asp-net-mvc-application) –

+0

你有沒有數據庫 - 你是否嘗試使用「代碼優先存在數據庫」? – adamshakhabov

回答

1

所以有幾件事。你在正確的軌道上。

您將需要重寫上下文類中的OnModelCreating()方法,並定義一個初始化策略以及實體配置映射(這非常適合在單獨的類中創建它,但您可以在方法中使用它) OnModel創建)。所以,你的上下文類可以是這個樣子:

public class ClassAppContext : DbContext 
{ 
    public DbSet<Post> Posts { get; set; } 

    public ClassAppContext() : base("name=ClassAppDbContext") 
    { 
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges<ClassAppContext>()); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Conventions.Remove(new PluralizingTableNameConvention()); 
     modelBuilder.Configurations.AddFromAssembly(typeof(PostMap).Assembly); 
    } 
} 

public class PostMap : EntityTypeConfiguration<Post> 
{ 
    public PostMap() 
    { 
     ToTable("Post"); 
     HasKey(x => x.PostId) 
      .Property(x => x.PostId) 
      .IsRequired() 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

     Property(x => x.Title) 
      .IsRequired() 
      .HasColumnType("nvarchar") 
      .HasMaxLength(250); 

     Property(x => x.Content) 
      .HasColumnType("nvarchar") 
      .HasMaxLength(500); 
    } 
} 

ClassAppDbContext是在你的web.config中定義(也app.config中,如果你有一個單獨的程序上下文)的連接字符串名稱。

+0

感謝您的回答。此代碼是否會創建數據庫,或者我將不得不做額外的工作?:) –

+1

您將不得不啓用實體框架遷移。因此打開包管理器控制檯並輸入** enable-migrations -enableautomaticmigrations **。在此類型** update-database **之後,將爲您的連接字符串是正確的並且項目構建而創建數據庫。 – Jinish

+0

我也建議閱讀https://msdn.microsoft.com/en-us/library/jj554735(v=vs.113).aspx上的實體框架遷移 – Jinish

相關問題