每次创建新的DbContext时,EF是否会创建数据库的内存模型?

时间:2013-03-05 03:27:41

标签: sql-server asp.net-mvc entity-framework entity-framework-4 ef-code-first

我有以下类来创建我的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的内容?

还有一个问题。 EF多久创建一次“数据库内存模型”。每次我实例化DbContext类时都会发生这种情况吗?

1 个答案:

答案 0 :(得分:2)

  1. 是的,您需要配置关系,除非您遵守这些约定。 Here是代码优先约定的一些细节。

  2. 如果数据库已经存在,您可能需要根据现有数据库更改配置(映射)。

  3. 对于每个DbContext实例,它将创建一个内存实例(但它不会将db中的所有数据加载到内存中,除非你访问它们)