类在控制器中没有无参数的构造函数异常

时间:2019-02-19 04:01:42

标签: c# asp.net sql-server model-view-controller

我正在尝试采用实体框架代码优先方法。我先创建模型,然后创建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
}

感谢您的帮助

1 个答案:

答案 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