web-dev-qa-db-ja.com

Asp.Net MVC 5アプリケーションのすべてのモデルのModels.ApplicationDbContext?

Asp.Net MVC 5 Webサイトを作成しています。 追加 ApplicationUserのカスタマイズされたフィールドと外部キーの追加を他のモデルに追加する必要があります。コンテキストタイプを1つだけ使用する必要があると思います。ただし、コードスキャフォールドは次のApplicationDbContextクラスを既に生成しています。すべてのpublic DbSet<...> ... { get; set; }クラスで?または、より良いパターンがありますか?

namespace MyApp.Models
{
    // You can add profile data for the user by adding more properties to your User class, please visit http://go.Microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : User
    {  
    }

    public class ApplicationDbContext : IdentityDbContextWithCustomUser<ApplicationUser>
    {
    }
}
30
ca9163d9

そのことを説明する素晴らしいビデオがあります。 Scott Allenによる無料のASP.NET MVC 5 Fundamentalsコースをご覧ください。正確な 答えはこちら (3:30から開始)。

28
zjerry

それらを分離しておくことをお勧めします。システムの2つの部分を結合する理由は本当にありません。別のDbContextを追加するには、YourContext.csというモデルにファイルを追加するだけです。

_public class YourContext: DbContext
{
    public YourContext() : base("name=YourContext")
    {
    }

    // Add a DbSet for each one of your Entities
    public DbSet<Room> Rooms { get; set; }
    public DbSet<Meal> Meals { get; set; }
}
_

次に、ルートweb.configで

<add name="YourContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=YourContext; Integrated Security=True"" providerName="System.Data.SqlClient" />

パッケージマネージャコンソールenable-migrationsを実行すると、移行するdbcontextが尋ねられます。 YourContextを選択します。

編集:リポジトリ/作業単位を追加する必要はありません。EntityFrameworkがこれを行います。

10
stink

注意:これは、ALLOTが変更されたbeta2のように書かれています!うまくいけばそれのほとんどは固執しますが、RCまで保証はありません。

NuGETパッケージマネージャーを使用しないでください(RCまで)。プロジェクトをアップします。 (EF 7以降です)

projects.jsonには、次の依存関係が必要です。 (または、ベータ2、またはRCの最新バージョン)

    "EntityFramework": "7.0.0-beta1",
    "EntityFramework.Relational": "7.0.0-beta1",
    "EntityFramework.Commands": "7.0.0-beta1",
    "EntityFramework.Migrations": "7.0.0-beta1",
    "EntityFramework.SqlServer": "7.0.0-beta1"

新しいフォルダDBContextsを追加し、新しいコンテキストにcシャープファイルを追加します。

  public class BlaBlaDB : DbContext
    {
        public DbSet<Models.MyOtherModel> MyOtherModels { get; set; }

        protected override void OnConfiguring(DbContextOptions options)
        {
            options.UseSqlServer();
        }
    }

また、config.jsonに、接続文字列を追加してください。新しい名前を付けたIdentityDBとまったく同じです。次に、startup.jsonにデータベースを登録します。

 services.AddEntityFramework(Configuration)
                .AddSqlServer()
                .AddDbContext<DataContexts.IdentityDB>()
                .AddDbContext<DataContexts.BlaBlaDB>();

Kはこのプロジェクトを実行し、スタートアップを使用してコンテキストを注入し、必要なものをすべて実行するため、これはコンパイルする必要があります。現時点では、VS2015 BetaにはEFのコマンドがすべて/または機能していません。

Windows用KREをインストールする必要があります。

コマンドプロンプトを開き、プロジェクトディレクトリを参照し、ソリューションを入力して、次のコマンドを入力します。

k ef context list
k ef migration add -c (context.from.above) initial
k ef migration apply -c (context.from.above)

これで、マルチコンテキスト移行が可能になりました。コンテキストを追加し続け、必要に応じてこれを繰り返します。 localdbでこれをデフォルトのプロジェクト設定として使用して、Linuxなどのあらゆる環境でスタンドアロンで動作できるようにしました。

注:インターフェースと実装を含むサービスを作成し、startup.jsonに登録する必要があります 詳細はこちら

1
Piotr Kula