【问题标题】:Error getting value from 'ServerVersion' when trying to JsonConvert.SerializeObject尝试 JsonConvert.SerializeObject 时从“ServerVersion”获取值时出错
【发布时间】:2016-05-26 11:10:18
【问题描述】:

我有一个非常基本的代码,使用实体框架在我的 MVC C# .NET 控制器中获取模型。

var myModel = myContext.MyData
                .Where(m => m.ID == 1)
                .FirstOrDefault();

string json = Newtonsoft.Json.JsonConvert.SerializeObject(myModel);

当我尝试运行此代码时,出现错误:

System.Data.SqlClient 上从ServerVersion 获取值时出错。

...如果我按Continue,视图会显示:

[InvalidOperationException:无效操作。连接是 关闭。]

怎么了? SQL与此有什么关系?如果我在视图而不是控制器中执行此操作,则会出现同样的错误。

编辑:

我的班级(模型)

namespace TrackerEntityFrameworks.Models
{
  public class MyData: DbContext
  {
    [Key]
    public int ID { get; set; }
    [Required]
    public string Name { get; set; }
    [Required]
    public DateTime StartTime { get; set; }
    [Required]
    public DateTime EndTime { get; set; }

    public ICollection<TripRecord> TripRecords { get; set; }
    public ICollection<TollRecord> TollRecords { get; set; }
  }
}

【问题讨论】:

    标签: c# .net json entity-framework model-view-controller


    【解决方案1】:

    您正在尝试序列化整个Dbcontext,不要那样做!

    DbContext 中删除MyData 的继承,就可以了。

    您的业务类必须“不了解持久性”,以便可重用并且实体框架以这种方式完美运行

    【讨论】:

    • 只有 Json 序列化的那一行搞砸了。如果我将模型传递给视图,我可以正常访问它。但我希望它为 Json。
    • 你能分享你的MyData类吗?
    • 你试图序列化整个dbcontext,不要那样做!从DbContext中删除MyData的继承
    • 哦.. 现在这一切都变得更有意义了!但是我遵循的指南希望我以这种方式编写它,尽管它似乎也可以正常工作 - 现在。以后会不会有麻烦? PS:编辑你的答案,我会让它成为正确的 - 非常感谢:)
    • 完成。通过此更改,您将永远不会遇到问题,这是正确的方法。
    【解决方案2】:

    将 DbContext 与您的实体分开,然后执行以下操作:

    namespace TrackerEntityFrameworks.Structure
    {
      public class MyContext: DbContext
      {
        public DbSet<TripRecord> TripRecords { get; set; }
        public DbSet<TollRecord> TollRecords { get; set; }
        public DbSet<MyData> MyDatas { get; set; }
      }
    }
    
    namespace TrackerEntityFrameworks.Models
    {
      public class MyData
      {
        [Key]
        public int ID { get; set; }
        [Required]
        public string Name { get; set; }
        [Required]
        public DateTime StartTime { get; set; }
        [Required]
        public DateTime EndTime { get; set; }
    
        // navigation properties: check how to implement relationships in EF Code First
        public ICollection<TripRecord> TripRecords { get; set; }
        public ICollection<TollRecord> TollRecords { get; set; }
      }
    }
    
    
    using(var myContext = new TrackerEntityFrameworks.Structure.MyContext())
    {
      var result = myContext.MyDatas
                      .Where(m => m.ID == 1)
                      .FirstOrDefault();
      string json = Newtonsoft.Json.JsonConvert.SerializeObject(result);
    }
    

    实体框架教程:http://www.entityframeworktutorial.net/code-first/entity-framework-code-first.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      相关资源
      最近更新 更多