【发布时间】:2018-06-08 08:45:52
【问题描述】:
我想构建一个使用实体框架核心的 WPF 应用程序,以便我可以处理 SQLite 数据库。
然后我执行以下操作,例如:
- 使用 Visual Studio 2017 (15.5.2) 创建 WPF 应用程序。
- 打开 nuget 包管理器并安装
Microsoft.EntityFrameworkCore.Sqlite和Microsoft.EntityFrameworkCore.Tools。 - 将一个按钮拖放到我的
MainWindow.xaml上,然后向Click事件添加一个事件处理程序,这样 xaml 看起来像:
<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(也许我只是很愚蠢) ,例如:
- System.Collections.Immutable.dll
- System.ComponentModel.Annotations.dll
- System.Data.Common.dll
- System.Net.Http.dll
- 名单还在继续
所以,如果我理解正确,当没有将重定向添加到配置 app.config 时,可执行文件必须可以访问这些签名的程序集,这意味着如果我创建安装程序,我必须将这些程序集与我的应用程序一起部署.但是 .NET 框架已经实现了这些,如果有人想在他们的机器上执行 WPF 应用程序,必须安装 .NET 框架。这让我想知道:
- 我可以用 .net 框架的实现替换这些 .net 核心实现程序集吗?可能吗?
- 如果前一点在技术上是可行的,它应该有效还是会产生各种问题?
- 如果不可能,是否预计将
.net framework和.net core混合使用可能会导致您的应用程序直接或间接引用程序集的重复实现(可能我的应用程序的其他模块使用.net framework'sSystem.Net.Http.dll类,但 EF 核心或其依赖项也引用.net core'sSystem.Net.Http.dll)?
【问题讨论】:
标签: c# .net wpf .net-core entity-framework-core