实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server

Posted

技术标签:

【中文标题】实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).ServerVersion【英文标题】:Entity Framework 6 error serverversion : (System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).ServerVersion 【发布时间】:2017-03-16 10:06:23 【问题描述】:

我正在实现一个 Web api,它将使用实体框架 6 获取数据。我正在使用 Sql Server 2014 和 Visual Studio 2015。在调试 CustomerDao 类中的代码时,我在 customerOrderContext 对象中看到了一个异常,尽管我可以查看客户对象中的记录。但是在 using 块执行后,我看不到任何记录。

((System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).ServerVersion

CustomerDao

using (var customerOrderContext = new Entities())
                
                    return (from customer in customerOrderContext.Customers

                            select new CustomerOrder.BusinessObjects.Customers
                            
                                Id = customer.Id,
                                FirstName = customer.FirstName,
                                LastName = customer.LastName,
                                Address = customer.Address,
                                City = customer.City,
                                Email = customer.Email,
                                Gender = customer.Gender,
                                State = customer.State,
                                Zip = customer.Zip
                            ).ToList();
                

config文件中的连接字符串如下

<add name="Entities" connectionString="metadata=res://*/EF.CustomerOrderContext.csdl|res://*/EF.CustomerOrderContext.ssdl|res://*/EF.CustomerOrderContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=Tom-PC\MSSQLSERVER2014;initial catalog=Ransang;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

上下文类如下

public partial class Entities : DbContext

    public Entities()
        : base("name=Entities")
    
    

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    

    

    public virtual DbSet<Customer> Customers  get; set; 
    public virtual DbSet<OrderDetail> OrderDetails  get; set; 
    public virtual DbSet<Order> Orders  get; set; 
    public virtual DbSet<Product> Products  get; set; 

CustomProvider.cs

  public IEnumerable<BusinessObjects.Customers> GetAllCustomers()
        
            IList<BusinessObjects.Customers> customerCollection = new List<BusinessObjects.Customers>();
            dataAccess.CustomerDao.GetAllCustomers();
            return customerCollection;
        

【问题讨论】:

您收到任何异常吗? (System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).ServerVersion 似乎不是异常消息。你在哪里看到的? 在调试 CustomerDao 类中的代码时,我在 customerOrderContext 对象中看到了一个异常,尽管我可以看到客户对象中的记录。但是在 using 块执行后,我看不到任何记录。我认为建立连接存在一些问题,因此无法将数据发送到 Ui 异常信息是什么? 看不到任何异常消息,例如应用程序运行时没有中断错误。调试时只看到我上面提到的消息 不清楚您在哪里/如何看到这一点。请添加您所看到的图片。 【参考方案1】:

documented 例外,这是因为连接已关闭。这没有问题。

但显然你得到空结果,因为你没有使用结果,你只是在你的方法中返回new List&lt;BusinessObjects.Customers&gt;()

public IEnumerable<BusinessObjects.Customers> GetAllCustomers()

    IList<BusinessObjects.Customers> customerCollection = 
        new List<BusinessObjects.Customers>(); // ← An empty list
    dataAccess.CustomerDao.GetAllCustomers();  // ← Just executed but didn't use anywhere
    return customerCollection;                 // ← The empty list you created at first

你需要return dataAccess.CustomerDao.GetAllCustomers();:

【讨论】:

以上是关于实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET 实体框架 - 带有实体框架 6 的 Oracle

错误:找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序

实体框架查看错误的数据库

使用 MySQL 和实体框架 6 StrongTypingException 错误

.NET 6 带有实体框架的新 LINQ 功能

指定的密钥太长;实体框架 6 中的最大密钥长度为 767 字节 Mysql 错误