Entity FrameworkとSQLiteを使用するWPFアプリケーションを作成しました。まず、ADO.NET Entity Data Modelを使用してデータベースをロードしました。すべてが非常にうまくいっていましたが、データベースでローカルファイルから選択するオプションを追加しました(データベース内のすべてのテーブルは同じである必要がありますが、データは異なるファイルでは異なる可能性があります)。私は追加することによって、DbContextファイルを編集しC#Entity Framework + SQLite - ユーザーごとにデータベースファイルを選択します。
::(私はここにhttps://stackoverflow.com/a/23105811これを見つけた)
public appDBEntities(string filename)
: base(new SQLiteConnection() { ConnectionString =
new SQLiteConnectionStringBuilder()
{ DataSource = filename, ForeignKeys = true }
.ConnectionString }, true)
{
}
ユーザーが使用してデータベースファイルを選択しているので、このソリューションをテストするために、私はコード内のいくつかの変更を自分のデータベースファイルをコピーして作られましたこの機能:私はすべてがこの機能を使用してデータベースからいくつかのデータを表示してOKかどうかをテストしたいたより
private void testButton_Click(object sender, RoutedEventArgs e)
{
// Create OpenFileDialog
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
// Set filter for file extension and default file extension
dlg.DefaultExt = ".db";
dlg.Filter = "Database files (*.db)|*.db";
// Display OpenFileDialog by calling ShowDialog method
Nullable<bool> result = dlg.ShowDialog();
// Get the selected file name
if (result == true)
{
// Open document
publicVariables.databasePath = dlg.FileName;
}
}
:
このように:
showParticipants(testDataGrid, publicVariables.databasePath);
しかし、この機能は
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
は、この例外をスローしています:文脈から生成されたコードとコードファーストモードで使用されている
データベースファーストまたはモデルファースト開発用のEDMXファイル。これは正しく動作しません。この問題を修正するには、この例外をスローするコード行を削除しないでください。データベースファーストまたはモデルファーストを使用する場合は、Entity Framework接続文字列が起動プロジェクトのapp.configまたはweb.configに含まれていることを確認してください。独自のDbConnectionを作成する場合は、それがEntityConnectionであり、他の種類のDbConnectionではなく、DbConnectionをとる基本DbContextコンストラクタの1つに渡すことを確認してください。最初のコードまず、データベースの詳細については、とモデルまずここでEntity Frameworkのドキュメント>を参照するには、次のhttp://go.microsoft.com/fwlink/?LinkId=394715