我正在尝试采用实体框架代码优先方法。我先创建模型,然后创建DbContext并将其添加到控制器。我遵循了在线教程,因为我以前从未使用过C#。
但是,直到我在控制器中向数据库添加调用之前,才创建表。
public ActionResult Index()
{
db.posts.ToList();
return View();
}
但是该呼叫引发了。
InvalidOperationException:类'SocialMediaMining.Models.SocialMedia.Facebook.posts'没有无参数的构造函数。
帖子类别:
public class posts
{
public dynamic jsonObj { get; set; }
public posts(dynamic json)
{
jsonObj = json;
if (jsonObj != null)
{
id = jsonObj.id;
name = jsonObj.name;
if(jsonObj.feed !=null)
{
feed = new feed(jsonObj.feed);
}
}
}
public string id { get; set; }
public string name { get; set; }
public virtual feed feed { get; set; }
public int postsId { get; set; }
}
控制器:
public class FacebookController : Controller
{
//The dbcontext call
FacebookEntities db = new FacebookEntities();
public ActionResult Index()
{
// the error
db.posts.ToList();
return View();
}
// more code here
}
// DbContext
public class FacebookEntities : DbContext
{
public FacebookEntities() : base("SocialMediaDb")
{
}
public DbSet<posts> posts { get; set; }
//more code here
}
感谢您的帮助
答案 0 :(得分:1)
异常消息非常简单-您需要为posts
类指定一个无参数的构造函数,其外观应如下所示:
public class posts
{
// add this constructor
public posts()
{
}
public dynamic jsonObj { get; set; }
public posts(dynamic json)
{
jsonObj = json;
if (jsonObj != null)
{
id = jsonObj.id;
name = jsonObj.name;
if(jsonObj.feed !=null)
{
feed = new feed(jsonObj.feed);
}
}
}
public string id { get; set; }
public string name { get; set; }
public virtual feed feed { get; set; }
public int postsId { get; set; }
}
请注意,任何要包含在DbSet<T>
类型参数中的实体类都必须具有无参数构造函数才能启用与EF的绑定。还建议将PascalCase用于实体类名称和属性名称,例如Posts
。