1

dbcontext を作成するための次のクラスがあります。

public class DataContext : DbContext
{
    public DataContext()
        : base(nameOrConnectionString: "Default") { }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
    public DbSet<TestAccount> TestAccounts { get; set; }
    public DbSet<Application> Applications { get; set; }
}

私のデータベースには次のテーブルがあります。

CREATE TABLE [dbo].[TestAccount] (
    [TestAccountId]   INT            IDENTITY (1, 1) NOT NULL,
    [ApplicationId] INT,
    [Name] NVARCHAR (MAX) NOT NULL,
    [DataVersion] ROWVERSION,
    CONSTRAINT [PK_dbo.TestAccount] PRIMARY KEY CLUSTERED ([TestAccountId] ASC),
    CONSTRAINT fk_AccountApplication FOREIGN KEY (ApplicationId) REFERENCES Application(ApplicationId)
);

私が理解していることから、EFはデータベースのメモリ内モデルを作成しますが、私が理解していないのは、その情報に外部キー関係が自動的に含まれるか、インターネットで見つけた次の例のように指定する必要があるかということです:

//        public AccountConfiguration()
//        {
//            //            // Account has 1 Speaker, Speaker has many Account records
//            //            HasRequired(s => s.Speaker)
//            //               .WithMany(p => p.SpeakerAccounts)
//            //               .HasForeignKey(s => s.SpeakerId);
//        }

また、データベースが既に存在する場合、PluralizingTableNameConvention を削除する必要があるなどのことを追加する必要がありますか?

もう1つ質問です。EF が "データベースのインメモリ モデル" を作成する頻度。これは、DbContext クラスをインスタンス化するたびに発生しますか?

4

1 に答える 1

2
  1. はい、規則に従わない限り、関係を構成する必要があります。 コード ファースト規則の詳細を次に示します。

  2. データベースが既に存在する場合は、既存のデータベースに従って構成 (マッピング) を変更する必要がある場合があります。

  3. DbContext のインスタンスごとに、メモリ内インスタンスを作成します (ただし、アクセスしない限り、db 内のすべてのデータをメモリにロードするわけではありません)。

于 2013-03-05T03:38:04.347 に答える