2016-11-25 21 views
0

私は自分自身にasp.net mvcを教えようとしており、dbcontextクラスの正しい設定を行う方法がわかりません。データベースコンテキストクラスの適切な設定ですか?

最初に私のプロジェクトにエンティティフレームワークをインストールしました。 は、その後、私はこのように見てモデルを作成しました:

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

    } 
を:

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をしたこのクラスがどのように見えるかです

私のアプローチが正しいかどうか誰かに教えてもらえますか?もしそうでなければ、何が間違っていますか?

また、これらのクラスからデータベースを作成する方法はありますが、自動生成されていますが、プロジェクトにはDBが表示されません。

+1

[MVC 5を使用してEntity Framework 6のコードを最初に使用する](https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an -entity-framework-data-model-for-asp-net-mvc-application) –

+0

あなたはすでにデータベースを持っていますか?「最初にデータベースを存在させるためのコード」を使用しようとしますか? – adamshakhabov

答えて

1

だから、いくつかのことがあります。あなたは正しい道を歩いています。

コンテキストクラスでOnModelCreating()メソッドをオーバーライドする必要があります。また、エンティティのコンフィグレーションマップとともに初期化ストラテジを定義する必要があります(別のクラスで作成するのが理想的ですが、 OnModelCreatingも同様)。だからあなたのコンテキストクラスは、のようなものを見ることができます:

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は(あなたが別のアセンブリのコンテキストを持っている場合も、App.configファイルに)あなたのweb.configファイルで定義された接続文字列名です。

+0

この回答に感謝します。このコードでDBが作成されるのですか、何か特別な処理が必要ですか?:) –

+1

エンティティフレームワークの移行を有効にする必要があります。パッケージマネージャコンソールを開き、** enable-migrations -enableautomaticmigrations **と入力します。その後** update-database **と入力すると、データベースが作成され、接続文字列が正しく、プロジェクトが構築されます。 – Jinish

+0

また、https://msdn.microsoft.com/en-us/library/jj554735(v=vs.113).aspxのEntity Frameworkの移行についてお読みになることをお勧めします – Jinish

関連する問題