gpt4 book ai didi

c# - 为什么编译器要求在用户界面项目中引用 Entity Framework ?

转载 作者:行者123 更新时间:2023-12-01 22:53:43 24 4
gpt4 key购买 nike

我正在尝试学习如何创建一个 Winform C# 应用程序,该应用程序使用 EF 和存储库模式。

根据我的理解,UI 层应该独立于 Entity Framework (它通过存储库使用数据,并且不应该关心是否有 Entity Framework 或任何其他数据提供程序),但是如果 WinForms 项目是,编译器会显示错误没有引用 Entity Framework (当我添加对 EF 的引用时,一切正常)

错误消息

未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的 Entity Framework 提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分中注册

为什么编译器需要我的 Winform 项目引用 Entity Framework ?

来自 Winforms 项目的代码

    private void MainForm_Load(object sender, EventArgs e)
{
//Customer is a POCO class
using (var customers = new EfRepository<Customer>())
{
foreach (var c in customers.All())
{
CList.Items.Add(c.CustomerName);
}
}
}

private void SaveCustomerButton_Click(object sender, EventArgs e)
{
var newCustomer=new Customer();
newCustomer.CustomerName = CName.Text;
newCustomer.CustomerDescription = CDescription.Text;
//newCustomer.
using (var customers = new EfRepository<Customer>())
{
customers.Add(newCustomer);
customers.Commit();
}
}

存储库项目中的代码

public class EfRepository<T> : IRepository<T>, IDisposable where T : class//, IEntity<int>
{
private FirstContext _ctx = new FirstContext();
private DbSet<T> _set;

public EfRepository()
{
//_ctx = _context;
_set = _ctx.Set<T>();
}
public void Add(T newEntity)
{
_set.Add(newEntity);
}
public IQueryable<T> All()
{
return _set;
}

上下文

public class FirstContext : BaseContext<FirstContext>
{
public DbSet<Customer> Customers{ get; set; }
}

[编辑]

我添加了 app.config(到我的 UI 项目)以及有关我的数据库的信息,但只有当我将 Entity Framework 添加到我的 UI 项目时它才有效,如果我从连接到数据库的 UI 项目存储库中删除 EF 则不会返回任何数据(也没有错误...)

这是我的 app.config 的内容:

<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="RepositoryDb" connectionString="Data Source=.;Initial Catalog=RepositoryDb;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>

最佳答案

您是对的,您的 GUI 项目不应该直接需要 EF 程序集。当然,它仍然会通过您的存储库项目加载它们。

但默认情况下,应用程序仅使用 1 个配置文件。
因此,您确实需要 app.config 中的数据库设置,就像错误告诉您的那样。

当您添加 EF 库时,配置文件中可能有一些更改。也许当您再次删除库时它会继续工作。

关于c# - 为什么编译器要求在用户界面项目中引用 Entity Framework ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19459843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com