初級代碼游戲的專欄介紹與文章目錄-CSDN博客
我的github:codetoys,所有代碼都將會位于ctfc庫中。已經放入庫中我會指出在庫中的位置。
這些代碼大部分以Linux為目標但部分代碼是純C++的,可以在任何平臺上使用。
源碼指引:github源碼指引_初級代碼游戲的博客-CSDN博客
? ? ? ? 本文接上一篇:C#使用實體類Entity Framework Core操作mysql入門:從數據庫反向生成模型-CSDN博客
一、連接字符串在生成代碼里
? ? ? ? 上一篇我們已經完成了基本操作,但是有一個問題,連接字符串被原樣寫入了生成的上下文代碼里,代碼是這樣的:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see https://go.microsoft.com/fwlink/?LinkId=723263.=> optionsBuilder.UseMySQL("server=???;userid=???;pwd=???;port=3306;database=???;sslmode=none;allowPublicKeyRetrieval=true;");
? ? ? ? 因為這是不安全的操作,所以代碼里面直接給了一個警告,并給了官方指引。
? ? ? ? 官方建議的方案是用配置參數,但是使用配置參數需要支持配置參數的項目,而我的項目是個類庫,并不是asp.net或應用程序,所以不能使用配置參數。
? ? ? ? 除了安全原因,如果修改了數據庫需要重新生成,或者修改了數據庫參數,都要修改源代碼也是不可接受的,所一定要想辦法解決。
二、不生成連接參數
? ? ? ? 雖然不能使用配置參數,不過仍有解決方案,而且更通用:用-NoOnConfiguring參數來阻止生成這個方法。在命令行最后增加這個參數,生成的代碼就不會有上面的這個方法。
? ? ? ? 仔細對比一下發現,生成的代碼不僅沒有了OnConfiguring方法,也沒有了默認構造函數,從而必須手動提供參數才行,下面是修改后的測試代碼:
{DbContextOptionsBuilder<庫名Context> optionsBuilder =new ();optionsBuilder.UseMySQL("server=???;userid=???;pwd=???;port=3306;database=???;sslmode=none;allowPublicKeyRetrieval=true;");using var db = new 庫名Context(optionsBuilder.Options);var records = db.表名;foreach (var item in records){Log(item.col1);}}
? ? ? ? 這個方法提供了完全的自由度。
(這里是文檔結束)