【问题标题】:How to use EF Code-First without an app.conf file?如何在没有 app.conf 文件的情况下使用 EF Code-First?
【发布时间】:2011-07-08 18:38:23
【问题描述】:

如果我使用 app.conf 文件来定义 SQL CE 4.0 DB 的连接,我的应用程序可以正常工作。

如何在代码中没有 app.conf 的情况下“初始化连接”(希望这是正确的术语...)?

这是我目前所拥有的(不多):

SqlCeConnectionStringBuilder builder = new SqlCeConnectionStringBuilder();
builder["Data Source"] = "db.sdf";               

//What is missing here?

PartyDB DB = new PartyDB();

var dinners = from d in DB.Dinners                        
              select d;

非常感谢任何提示。

【问题讨论】:

    标签: c# .net entity-framework c#-4.0 ef-code-first


    【解决方案1】:

    J。 Tihon的回答帮助了我。我添加以下内容以供将来参考。我在构造函数中初始化了 Database.DefaultConnectionFactory。

    public partial class MyDb: DbContext
    {
        public static string Connection
        {
            get
            {
    
                var result = new SqlCeConnectionStringBuilder();
    
                result["Data Source"] = "MyDatabaseFile.sdf";
    
                return result.ToString();
            }
        }
    
        public MyDb()
            : base(Connection)
        {
            Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
    
        }
    
        public DbSet<MyTable> MyTable { get; set; }
    
    }
    

    【讨论】:

      【解决方案2】:

      有多种实例化 DbContext 的方法(您的 PartyDb 可能源自该方法)。我建议你看看这个blog-post。对于您的具体问题,博客文章中的这一段应该适合:

      您可以将完整的连接字符串传递给 DbContext,而不仅仅是数据库或连接字符串名称。默认情况下,此连接字符串与 System.Data.SqlClient 提供程序一起使用;这可以通过在 context.Database.DefaultConnectionFactory 上设置不同的 IConnectionFactory 实现来更改。

      【讨论】:

      • 感谢您的链接! :-) 我在这个网站上找到的解决方案有效: Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
      【解决方案3】:

      如果您有 oracle 提供者并且所有答案都没有帮助,请尝试以下操作: 将 entityFramework**defaultConnectionFactory** 中的 app.config 条目更改为

      type="Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework" ......

      现在您需要发送给构造函数的只是一个常规连接字符串:

      公共部分类 MyModel : DbContext { 公共MyModel(字符串连接字符串) :基础(连接字符串) { } ..........

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 2016-03-10
        • 1970-01-01
        相关资源
        最近更新 更多