ASP.NET MVC4:IQueryable不包含“添加”的定义

时间:2013-01-29 12:23:41

标签: asp.net entity-framework asp.net-mvc-4 iqueryable

我曾尝试制作MVC新闻系统。我首先使用了一个用于创建员工部门的复数教程。我改变了想法以适应我自己的目的,将部门改为“类别”,将员工改为“新闻帖子”。这一切都很好,但现在我想删除类别,因为我不需要我的新闻系统的类别。但是当我这样做时,我无法使用entityframework添加到数据库中。

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

INewMvcSiteDataSource

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

    void Save();
}

这是我的DB Context类继承的:

NewMvcSiteDb

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();
    }
}

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

NewsController

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

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

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

你们可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分: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();
    }
}