1

我试图制作一个 MVC 新闻系统。我从使用复数教程开始,该教程用于创建一个有员工的部门。我改变了想法以适应自己的目的,将部门改为“类别”,将员工改为“新闻邮报”。这一切都很好,但现在我想删除类别,因为我的新闻系统不需要类别。但是当我这样做时,我无法使用实体框架添加到数据库中。

我有一个数据源接口,如下所示:

INewMvcSiteDataSource

public interface INewMvcSiteDataSource
{
    IQueryable<NewsPost> NewsPosts { get; }

    void Save();
}

这是由我的 DB Context 类继承的:

新MvcSiteDb

public class NewsMvcSiteDb : DbContext, INewMvcSiteDataSource
{
    public NewsMvcSiteDb() : base("DefaultConnection")
    {
    }

    public DbSet<NewsPost> NewsPosts { get; set; }

    IQueryable<NewsPost> INewMvcSiteDataSource.NewsPosts
    {
        get { return NewsPosts; }
    }

    public void Save()
    {
        SaveChanges();
    }
}

然后我想在控制器中使用它来向数据库添加新闻:

新闻控制器

var newsPost = new NewsPost()
                    {
                        Subject = newsModel.Subject,
                        Content = newsModel.Content,
                        ImagePath = newsModel.ImagePath
                    };
_db.NewsPosts.Add(newsPost);
_db.Save();

但这是 ADD 失败并显示消息的地方:“System.Linq.IQueryable”不包含“Add”的定义,并且找不到接受“System.Linq.IQueryable”类型的第一个参数的扩展方法“Add” (您是否缺少 using 指令或程序集引用?)

现在正如错误所说,它是由使用 IQueryable 引起的,但我不知道该怎么做。

你们能帮忙吗?

谢谢。

4

1 回答 1

1

如果您不介意通过界面公开 DbSet(有些人不喜欢 ORM 渗入应用程序),您应该能够执行以下操作:

public interface INewMvcSiteDataSource
{
    DbSet<NewsPost> NewsPosts { get; }

    void Save();
} 



public class NewsMvcSiteDb : DbContext, INewMvcSiteDataSource
{
    public NewsMvcSiteDb() : base("DefaultConnection")
    {
    }

    public DbSet<NewsPost> NewsPosts { get; set; }

    public void Save()
    {
        SaveChanges();
    }
}
于 2013-01-29T13:02:32.503 回答