-2

コードファーストのアプローチを学んでいます。

以下を使用して EbuyDataContext4.cs ファイルを作成しました。

namespace Ebuy.Website.Models
{
    public class EbuyDataContext4 : DbContext
    {
        public DbSet<Auction> Auctions { get; set; }
    }
}

モデルに基づいて 1 つのフォームを作成して保存する際に使用します。

2 つの質問があります。

  1. データはどこに保存されていますか?
  2. モデルで何かを変更すると、それらの変更が原因で dbContext に問題があるというエラーが表示されます。それを削除して別のdbContextを作成することで解決します(今のところdbContext3があります)が、このエラーを解決するよりスマートな方法があると思います...
4

3 に答える 3

1

最初にコードを使用するアプローチは、Scratch から新しいプロジェクトを開始する場合に非常に役立ちます。

まず、データは DataContext と同じ名前のデータベースに保存されます。この場合は EbuyDataContext4 です。EF は、指定されたモデルからデータベース全体を作成します。

次に、Code-First の方法を採用しているため、クラス モデルを更新するたびにデータベースで更新する必要があるため、以下のコードを App_Start に配置します。

protected void Application_Start()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EbuyDataContext>());
}

その助けを願っています!詳細については、こちらのEntity Framework Code Firstをご覧ください。

于 2013-04-30T13:27:37.210 に答える
0

1-デフォルトでは、Entity Framework は、dbcontext と同じ名前/名前空間を持つローカル SQL Express インスタンスにデータベースを作成します。

2-Code First Migrations ( http://msdn.microsoft.com/en-us/data/jj591621.aspx )を調べる必要があります。これにより、実行している再作成なしでモデルを変更できます。

于 2013-04-30T13:25:16.930 に答える
0

データが保存されている場所を知るには、web.config を調べてください。DefaultConnection を使用する可能性が高いことをさらに指定しなかった場合は、最初に使用しているコンテキストを確認します (web.config でこの文字列を検索します)。

実際、モデルを変更すると、更新されていないデータベース (変更が反映されていない) に対して実行されるため、アプリケーションがクラッシュします。

テストと開発用 (本番用ではありません ;))

まだいじっている間に初期データと構造を保証する初期化子を使用することをお勧めします。

プロジェクトのどこかにイニシャライザ コードを含むファイルを作成します (サンプル識別子のみ)。

namespace DataAccess.DAL
{
    using System.Collections.Generic;
    using System.Data.Entity;

    /// <summary>
    /// This class initializes the ArticleContext's data every time something in the model (POCOs) changed
    /// </summary>
    public class Initializer : DropCreateDatabaseIfModelChanges<DbContext>
    {
        /// <summary>
        /// Seeds the specified context.
        /// </summary>
        /// <param name="context">The context.</param>
        protected override void Seed(DbContext context)
        {
//place initializer code here
            //var items = new List<Item);
            //items .ForEach(a => context.Items.Add(a));
            //context.SaveChanges();
        }
    }
}

プロジェクトにいくつかの参照を追加する必要があるかもしれません...次に、global.asax でイニシャライザを接続します。

Database.SetInitializer<DbContext>(new Initializer());
于 2013-04-30T13:25:28.873 に答える