1

MVC ニュース システムを作成しようとしました。私は、従業員と一緒に部門を作成するために使用されたpluralsightチュートリアルを使用することから始めました. 部署を「カテゴリー」に、社員を「ニュースポスト」に、自分の目的に合わせて考えを変えました。これで問題なく動作しますが、ニュース システムにカテゴリは必要ないので、カテゴリを削除したいと思います。しかし、これを行うと、エンティティフレームワークを使用してデータベースに追加できません。

次のようなデータソースのインターフェイスがあります。

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

次に、コントローラーでそれを使用して、データベースにニュース投稿を追加します。

ニュースコントローラー

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

しかし、ここで 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 に答える