我有一个非常基本的代码,使用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; }
}
}
答案 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