部署使用Entity Framework Core

时间:2017-12-27 18:05:06

标签: c# .net wpf .net-core entity-framework-core

我想构建一个使用实体框架核心的WPF应用程序,以便我可以处理SQLite数据库。

然后我执行以下操作,例如:

  • 使用Visual Studio 2017(15.5.2),创建一个WPF应用程序。
  • 打开nuget包管理器并安装Microsoft.EntityFrameworkCore.SqliteMicrosoft.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文件夹,我注意到有许多DLL我认为是.NET核心的.NET标准实现(也许我只是非常愚蠢的),例如:

  • System.Collections.Immutable.dll
  • System.ComponentModel.Annotations.dll
  • System.Data.Common.dll
  • System.Net.Http.dll
  • 列表继续

因此,如果我理解正确,当没有重定向添加到config app.config时,这些签名的程序集必须可以被可执行文件访问,这意味着如果我创建了一个安装程序,我必须将这些程序集与我的应用程序一起部署。但.NET框架已经实现了这些,如果有人想在他们的机器上执行WPF应用程序,则必须安装.NET框架。这让我想知道:

  1. 我可以用.net框架的实现替换这些.net核心实现程序集吗?可能吗?
  2. 如果前一点在技术上是可行的,它应该起作用还是会产生各种各样的问题?
  3. 如果不可能,是否期望混合.net framework.net core可能会导致应用程序直接或间接引用的程序集的重复实现(可能我的应用程序的其他模块使用{{ 1}} .net framework's类,但EF核心或其依赖项引用System.Net.Http.dll System.Net.Http.dll)?

1 个答案:

答案 0 :(得分:1)

简短回答:

  

我可以用.net替换这些.net核心实现程序集吗?   框架的实施?有可能吗?

没有。如果您的应用程序是用.NET Core编写的,那么您就无法做到。你也不应该这样做。如果可能的话,我宁愿选择.NET Core程序集。

编辑: 因为您已经使用.NET Framework进行WPF应用,所以您可以卸载.NET Core实现并只安装.NET Framework。但是,如果您在除了Windows之外的其他平台上使用您的应用程序,那么您应该使用.NET Core程序集。