【问题标题】:Does EF create an in memory model of the database every time I create a new DbContext?每次创建新的 DbContext 时,EF 是否都会创建数据库的内存模型?
【发布时间】:2013-03-05 03:27:41
【问题描述】:

我有以下类来创建我的 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 类时都会发生这种情况吗?

【问题讨论】:

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


    【解决方案1】:
    1. 是的,除非您遵循约定,否则您需要配置关系。 Here 是关于代码优先约定的一些细节。

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

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

    【讨论】:

    • 好的,如果我理解正确的话。我可以确认是否已经有一个数据库,那么我仍然需要使用 fluent API 来告诉 EF 诸如外键关系之类的事情。
    • 并非总是如此。如果您遵循约定,则无需配置映射。示例 - 您可能不需要配置 SpeakerId,因为您遵循此处的约定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2014-01-15
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多