2

Code First 是一个了不起的功能。但是我不知道如何在不首先创建专门的 DbContext 的情况下持久化一个对象。有可能吗?我想看看这些方面的东西:

        var dbConn = new SqlCeConnection("Data Source=Test.sdf");
        using (var db = new DbContext(dbConn, true))
        {
            var cmp = new Company { CompanyName = "Microsoft" };
            db.Set(typeof(Company)).Add(cmp);
            var recordsAffected = db.SaveChanges();

            Console.WriteLine(
                "Saved {0} entities to the database, press any key to exit.",
                recordsAffected);
            Console.ReadKey();
        }

是否可以为模型创建动态注册一个类?一定有办法!

4

1 回答 1

1

DbContext不,据我所知,没有任何关于映射的信息就不可能创建。定义映射和数据库初始化需要具有预定义 DbSet 的专用上下文。DbCompiledModel仅当您通过在使用之前手动传递创建的通过其构造函数提供有关映射的信息时,您才可以使用基本 DbContext,DbContext但我还没有尝试过。

问题是 DbSet 和覆盖OnModelCreating用于推断所需的映射。如果您没有 DbSets 或OnModelCreating定义DbContext无法推断和缓存映射。映射元数据只为每种上下文类型创建和编译一次(直到应用程序重新启动)。该操作被认为非常慢。如果您没有特定的上下文类型,EF 可能无法推断映射,即使可以,它也可能需要为每个上下文实例创建和编译元数据(例如匿名类型)。

如果您使用DbCompiledModel手动创建的,您有责任重复使用它。

于 2011-03-29T05:48:53.840 回答