我对我在配置中缺少的东西或任何阻碍我前进的东西感到困惑。
我要做什么?我最初的测试用例只是获取一个集合,将其.ToList()传递给API。您的标准EF查询。
代码
using (var _dbContext = new FooContext())
{
ICollection<Location> locationItems = _dbContext.Locations.ToList();
return locationItems;
}
我真的不觉得这是必要的,但这就是一切。
我怎么了?
在这一点上,它对我而言不再有意义,并向我提供了强烈的迹象,表明在后台存在某些我完全错过的东西。这很可能是非常简单的配置块或设置。 当我尝试.ToList()我的位置,或用调试器枚举它们(确实是一样的东西)时,我在_dbContext知道的每个单个集合上都会抛出“ InvalidOperationException”。
让我排除明显的问题,问答时间。
问:它甚至连接到您的数据库吗?
A:是的,_dbContext.Database.Exists()向我返回了一个 true ,使用调试器检查 _dbContext.Database 也给了我很多匹配信息,以确认是否存在联系到我要与之交谈的SQL服务器上。
问:您的SQL数据库中是否有数据?
A:是的,很多。已通过SSMS检查。
问:您的DbContext甚至知道那些集合吗?
A:我相信吗?
public class FooContext : DbContext
{
public FooContext() : base("name=FooDB")
{
}
public DbSet<Car> Cars { get; set; }
public DbSet<FooEntry> FooEntries { get; set; }
public DbSet<ContactDetails> ContactDetails { get; set; }
public DbSet<Country> Countries { get; set; }
public DbSet<Equipment> Equipment { get; set; }
public DbSet<FuelType> FuelTypes { get; set; }
public DbSet<Location> Locations { get; set; }
public DbSet<Meeting> Meetings { get; set; }
public DbSet<Option> Options { get; set; }
public DbSet<Person> Persons { get; set; }
public DbSet<VehicleType> VehicleTypes { get; set; }
// force any DateTime fields to be DateTime2
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<DateTime>()
.Configure(c => c.HasColumnType("datetime2"));
}
}
此外,我可能应该指出,当我将数据从Sharepoint导入/播种到DB时,我正在另一个项目中执行多种方式的更复杂操作。 所有这些工作。
提供有关我的解决方案结构大致情况的上下文:
如果您需要更多信息来进行有根据的猜测,请告诉我这是怎么回事。
评论请求:
@mjwills:“是否在“ return locationItems”命中处设置了断点?-不,它出现在.ToList()
@DavidG:“什么是完整的例外?” -{“未找到具有不变名称'System.Data.SqlClient'的ADO.NET提供程序的实体框架提供程序。请确保该提供程序已在应用程序配置文件的'entityFramework'部分中注册。请参见http://go.microsoft.com/fwlink/?LinkId=260882更多信息。“}-我现在自己并没有更深入地研究Exception,因此我感到有些愚蠢。
答案 0 :(得分:2)
问题是app.config / web.config不包含EntityFramework的必要配置(无论出于何种原因)。
@ er-sho指出/确认,所有使用EntityFramework的项目都需要对其进行引用。最好在指定的项目上执行Install-Package EntityFramework
,这将自动在项目之间生成引用。
说明为什么这不是No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'的重复项:
初始状态:
+----------------------+----------------------------+
| Project | EntityFramework installed? |
+----------------------+----------------------------+
| Foo.WebService | no |
| Foo.Dao.Impl | no |
| Foo.EntityFramework | yes |
+----------------------+----------------------------+
结果:
未找到具有不变名称'System.Data.SqlClient'的ADO.NET提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的“ entityFramework”部分中注册。
Dao.Impl缺少EntityFramework配置。
将EntityFramework添加到我的DAO层后:
+----------------------+----------------------------+
| Project | EntityFramework installed? |
+----------------------+----------------------------+
| Foo.WebService | no |
| Foo.Dao.Impl | yes |
| Foo.EntityFramework | yes |
+----------------------+----------------------------+
结果:
+----------------------+----------------------------+
| Project | EntityFramework installed? |
+----------------------+----------------------------+
| Foo.WebService | yes |
| Foo.Dao.Impl | yes |
| Foo.EntityFramework | yes |
+----------------------+----------------------------+
结果:
我希望这对以后遇到同样问题的人有所帮助。
我感谢每个人的宝贵时间,他们对此进行了评论并引导我寻求解决方案。
答案 1 :(得分:0)