SQLiteデータベースを処理できるように、エンティティフレームワークコアを使用するWPFアプリを構築したいと思います。
次に、たとえば次のことを行います。
Microsoft.EntityFrameworkCore.Sqlite
とMicrosoft.EntityFrameworkCore.Tools
をインストールします。MainWindow.xaml
にドロップし、xamlが次のようになるようにイベントハンドラーをClick
イベントに追加します。<Window x:Class="WPFEFCoreDeploymentTest.MainWindow"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Click="ButtonBase_OnClick"></Button>
</Grid>
</Window>
MainWindow.xaml.cs
namespace WPFEFCoreDeploymentTest
{
using System.Linq;
using System.Windows;
using Microsoft.EntityFrameworkCore;
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
using (var context = new SomeContext())
{
if (context.Database.GetPendingMigrations().Any())
{
context.Database.Migrate();
}
}
}
}
public class SomeContext : DbContext
{
public DbSet<Test> Tests { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=local.db");
}
}
public class Test
{
public int Id { get; set; }
}
}
Add-Migration Migration1
さて、プロジェクトのbin/Debug
フォルダーに移動すると、.NETコアの.NET標準の実装であると思われるDLLがたくさんあることに気付きました(たぶん私は非常に愚かです)。例えば:
したがって、正しく理解していれば、config app.configにリダイレクトが追加されていない場合、これらの署名されたアセンブリは実行可能ファイルにアクセスできる必要があります。つまり、インストーラーを作成する場合は、これらのアセンブリをアプリケーションと一緒にデプロイする必要があります。ただし、.NET Frameworkはすでにこれらを実装しており、誰かが自分のマシンでWPFアプリケーションを実行する場合は、.NETFrameworkをインストールする必要があります。これは私に不思議に思います:
.net framework
と.net core
の両方を混在させると、アプリケーションによって直接または間接的に参照されるアセンブリの実装が重複する可能性があります(おそらく、私のアプリケーションの他のモジュールは.net framework's
を使用します) System.Net.Http.dll
クラスですが、EFコアまたはその依存関係は.net core's
System.Net.Http.dllも参照しています)?短い答え:
これらの.netコア実装アセンブリを.netフレームワークの実装に置き換えることはできますか?出来ますか?
いいえ。アプリケーションが.NETCoreで記述されている場合は、できません。また、あなたはすべきではありません。可能であれば、.NETCoreアセンブリを使用したいと思います。
編集:WPFアプリケーションに.NET Frameworkを既に使用しているため、.NET Core実装をアンインストールして、.NETFrameworkをインストールするだけで済みます。ただし、Windows以外のプラットフォームでアプリを使用する場合は、.NETCoreアセンブリを使用する必要があります。