无法从表转换为类

时间:2013-03-12 14:36:45

标签: c# sql-server asp.net-mvc linq visual-studio-2012

我正在创建一个MVC 3文章应用程序并使用LINQ将其连接到SQL数据库。我正在尝试使用LINQ代码创建一篇新文章,并且我最终会遇到这些错误:

  

ArticleRepository.cs(41,13,41,47):错误CS1502:'System.Data.Linq.Table.InsertOnSubmit(NyjiGrunnur.ArticleTable)'的最佳重载方法匹配有一些无效的参数

     

ArticleRepository.cs(41,45,41,46):错误CS1503:参数1:无法从'NyjiGrunnur.Models.Article'转换为'NyjiGrunnur.ArticleTable'

添加文章功能:

public void AddArticle(Article s)
    {
        ArticleLINQDataContext db = new ArticleLINQDataContext();
        //Article a = new Article { Id = s.Id, Content = s.Content, Name = s.Name, Subject =        s.Subject, Created = (DateTime)s.Created };
    Line 41:    db.ArticleTables.InsertOnSubmit(s);
        db.SubmitChanges();
    }

我有Articles.cs模型:

namespace NyjiGrunnur.Models
{
    public class Article
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Content { get; set; }
        public string Subject { get; set; }
        public DateTime Created { get; set; }
    }
}

我正在使用LINQ to SQL类。我也有一个有效的编辑功能,如下所示:

public void UpdateArticle(Article s)
    {
      ArticleLINQDataContext db = new ArticleLINQDataContext();

      var a = (from article in db.ArticleTables
                   where article.Id == s.Id
                   select article).SingleOrDefault();
      a.Name = s.Name;
      a.Subject = s.Subject;
      a.Content = s.Content;
      a.Created = s.Created;
      a.Id = s.Id;
      db.SubmitChanges();

    }

HomeController也应该正常工作。

2 个答案:

答案 0 :(得分:4)

正如错误试图告诉您的那样,您的LINQ to SQL类使用ArticleTable类,这与Article类不同。

您需要从ArticleTable(视图模型)创建Article(数据模型)实例,以便将其放入数据库中。

答案 1 :(得分:1)

看起来你正在使用AddArticle,但注释了映射:

public void AddArticle(Article s)
{
    ArticleLINQDataContext db = new ArticleLINQDataContext();
    ArticleTable a = 
        new ArticleTable { 
                             Id = s.Id, // *see question below code sample
                             Content = s.Content, 
                             Name = s.Name, 
                             Subject = s.Subject, 
                             Created = (DateTime)s.Created 
                         };
    db.ArticleTables.InsertOnSubmit(a);   // <-- note it's "a" instead of "s"
    db.SubmitChanges();
}

*是否自动生成Id?如果是这样,插入时不应该设置它。