iT邦幫忙

0

如何讓DB帳密不存放於web.config操作DbContext

  • 分享至 

  • xImage

如題請教:
1.原生方法如下,在web.config裡建一個DemoEntities2的ConnectionString

public partial class DemoEntities2 : DbContext
{
    public DemoEntities2()
        : base("name=DemoEntities2")
    {
    }

2.用ConfigurationManager抓取web.config的字串帶入DbContext也是可以連線成功

public DemoEntities()
    : base(ConfigurationManager.ConnectionStrings["DemoEntities2"].ConnectionString)
{
}

3.將ConfigurationManager字串複製貼上,這樣的方式就沒辦法運作,DB應該是有連上,但就發生錯誤。

public DemoEntities()
    : base("metadata = res://*/Models.Demo2.csdl|res://*/Models.Demo2.ssdl|res://*/Models.Demo2.msl;provider=System.Data.SqlClient;provider connection string=\"data source=localhost;initial catalog=Demo;persist security info=True;user id=submission;password=1234;MultipleActiveResultSets=True;App=EntityFramework")
{
}

錯誤訊息如下

初始化字串的格式和開始於索引 119 的規格不相符。
描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外狀況詳細資訊: System.ArgumentException: 初始化字串的格式和開始於索引 119 的規格不相符。

原始程式錯誤:


行 20:         {
行 21:             ViewBag.conn = ConfigurationManager.ConnectionStrings["DemoEntities2"].ConnectionString;
行 22:             return View(db.ProfessionalL1.ToList());
行 23:         }
行 24: 

專案為全新開的測試專案,MVC全部都由EF自動產生,資料庫也是全新開的,只建4個簡單資料表,各有2~3筆資料

想問的問題不是要解決這個Error,而是如果DB的帳密如果不寫在web.config裡,要如何把帳密寫入到DbContext讓它能正常運作呢?

原意就是想要把DB的帳密隱藏起來,不要寫在web.config裡

謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
暐翰
iT邦大師 1 級 ‧ 2020-05-24 13:34:02

只需要connectionstring就可以,如圖片
xxx
code like :

public DemoEntities()
    : base("data source=localhost;initial catalog=Demo;persist security info=True;user id=submission;password=Etpc@1234;MultipleActiveResultSets=True;App=EntityFramework")
{
}
leo226 iT邦新手 4 級 ‧ 2020-05-24 15:50:14 檢舉

我丟進去運行產生以下錯誤,我其實也有試過截取部份ConnectionString丟進去,都一樣是這個Error產生

在 Code First 模式中使用 EDMX 檔案產生程式碼以進行 Database First 和 Model First 開發,可能無法正常運作。若要修正此問題,請勿移除擲出此例外狀況的程式碼行。若希望使用 Database First 或 Model First,請確定已在啟動專案的 app.config 或 web.config 中納入 Entity Framework 連接字串。若要建立自己的 DbConnection,請確定其為 EntityConnection 而不是其他類型的 DbConnection,接著將其傳送到其中一個具有 DbConnection 的基礎 DbContext 建構函式。如需深入了解 Code First、Database First 以及 Model First,請參閱以下 Entity Framework 文件: http://go.microsoft.com/fwlink/?LinkId=394715
描述: 在執行目前 Web 要求的過程中發生未處理的例外狀況。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外狀況詳細資訊: System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: 在 Code First 模式中使用 EDMX 檔案產生程式碼以進行 Database First 和 Model First 開發,可能無法正常運作。若要修正此問題,請勿移除擲出此例外狀況的程式碼行。若希望使用 Database First 或 Model First,請確定已在啟動專案的 app.config 或 web.config 中納入 Entity Framework 連接字串。若要建立自己的 DbConnection,請確定其為 EntityConnection 而不是其他類型的 DbConnection,接著將其傳送到其中一個具有 DbConnection 的基礎 DbContext 建構函式。如需深入了解 Code First、Database First 以及 Model First,請參閱以下 Entity Framework 文件: http://go.microsoft.com/fwlink/?LinkId=394715

原始程式錯誤:


行 23:         protected override void OnModelCreating(DbModelBuilder modelBuilder)
行 24:         {
行 25:             throw new UnintentionalCodeFirstException();
行 26:         }
行 27:     
0
PPTaiwan
iT邦好手 1 級 ‧ 2020-05-24 16:21:31

資料程式寫成 Web API 連結端用 JWT 來取得認證碼,方便又好管理!!

現階段以此方式我給於 前端(angular typescript)、Android、iOS 來存取這些資料,方便管理與應用..

0
sonia
iT邦新手 2 級 ‧ 2020-05-25 11:12:52

不知你用的 Visual Studio 是那一版,2017、2019 可以用 EF Core Power Tools
做出來的DbContext 可以包含連線字串https://ithelp.ithome.com.tw/upload/images/20200525/2001887308nPKlMhLE.jpg

leo226 iT邦新手 4 級 ‧ 2020-05-25 11:25:29 檢舉

我使用VS2017的版本測試,EF Core Power Tools這個我再查看看怎麼用!

sonia iT邦新手 2 級 ‧ 2020-05-25 11:29:11 檢舉

/images/emoticon/emoticon12.gif

我要發表回答

立即登入回答