如何在没有app.conf文件的情况下使用EF Code-First?

时间:2011-07-08 18:38:24

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

如果我使用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;

任何提示都受到高度赞赏。

3 个答案:

答案 0 :(得分:5)

学家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; }

}

答案 1 :(得分:3)

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

  

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

答案 2 :(得分:0)

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

type =“Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory,Oracle.ManagedDataAccess.EntityFramework” ......

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

public partial class MyModel:DbContext     {         public MyModel(String ConnectionString)             :base(ConnectionString)         {         }     ..........