【问题标题】:Cannot convert from table to class无法从表转换为类
【发布时间】:2013-02-28 03:22:21
【问题描述】:

我正在制作一个 MVC 3 Article 应用程序并使用 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 应该也可以正常工作。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 很抱歉,如果这看起来很愚蠢,但我该怎么做呢? - 明白了。
    • @Zanii: new ArticleTable { ... }
    【解决方案2】:

    看起来您在使用 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 是自动生成的吗?如果是这样,您不应该在插入时设置它。

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多