簡體   English   中英

如何在運行時設置EF代碼優先連接字符串

[英]How to set a EF code first connection string at runtime

我想念一些東西。 我有一個小項目,試圖在數據庫中插入一些數據。 創建模型時,我對現有數據庫使用了代碼優先。 我想使該應用程序能夠在運行時指向任何服務器。 這是一個骯臟的實用工具應用程序,內部運行,但是運行時我需要一定的靈活性。 通過閱讀一些msdn文章,我看到了可以在初始化時擴展DBContext的地方,因此我執行了以下操作:

在初始化中添加了一個參數:

 public OtherEventModel(string ConnectionString)
            : base("name=OtherEventModel")
        {...

然后在我的代碼中,根據從UI傳入的屬性構建連接字符串:

private OtherEventModel ConnectToServer(string server, string username, string password)
        {
            try
            {

                SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder
                {
                    DataSource =  server,
                    UserID = username,
                    Password = password,
                    InitialCatalog = "My_Database",
                    IntegratedSecurity = true
                };

                var connection = sqlBuilder.ToString();
                ModelContext = new OtherEventModel(connection);

                return ModelContext;
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Error connecting to server {0}", ex.Message));
            }

我可以看到創建的連接字符串,但是當我運行代碼時,我收到一個異常,即連接字符串(在app.config中找不到應有的內容)。 由於我試圖在運行時注入連接字符串,因此我在應用程序配置中沒有連接字符串或鍵。

錯誤:

Error inserting data No connection string named 'OtherEventModel' could be found in the application config file

從我的閱讀中得到的印象是,代碼首先使用標准的SQL連接字符串,並且不需要EntityConnectionStringBuild(用於對象優先開發)

有人可以針對我錯過的內容或我做錯的事情向我指出正確的方向。

提前致謝

您快到了,只需將連接字符串傳遞給基本對象:

public OtherEventModel(string ConnectionString)
       : base(ConnectionString)

確保在下面的方法中注釋投擲線。 不幸的是,每次更新模型時,您都必須再次執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM