尝试使用JsonConvert.SerializeObject时从“ServerVersion”获取值时出错

时间:2016-02-15 13:50:23

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

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

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

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

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

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

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

  

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

怎么了? SQL与此有什么关系?如果我在View而不是Controller中执行此操作,则会出现相同的错误。

修改

我的班级(模特)

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; }
  }
}

2 个答案:

答案 0 :(得分:1)

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

MyData删除DbContext的继承,你应该没问题。

您的商务舱必须“坚持无知”,以便可重复使用,实体框架以这种方式完美运作

答案 1 :(得分:1)

从您的实体中分离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