0

asp.net mvc 4 テスト プロジェクトで DB コンテキスト アプローチを使用しています。

ここに私のドメインクラスがあります

カテゴリ.cs

public class Categroy
{
    public virtual int Id { get; set; }
    public virtual string CategoryName{ get; set; }
    public virtual ICollection<Post> Post{ get; set; }
}

Post.cs

public class Post
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string Description { get; set; }
}

IPostsDateSource.cs

public interface IPostsDataSource
{
    IQueryable<Category> Categories{ get; }
    IQueryable<Post> Posts { get; }

    void Save();
}

PostsDB.cs

public class PostsDB:DbContext,IPostsDataSource
{
    public PostsDB():base("DefaultConnection")
    {

    }

    public DbSet<Category> Categories{ get; set; }
    public DbSet<Post> Posts{ get; set; }

    void IPostsDataSource.Save()
    {
        SaveChanges();
    }

    IQueryable<Category> IPostsDataSource.Categories
    {
        get { return Categories; }
    }

    IQueryable<Post> IPostsDataSource.Posts
    {
        get { return Posts; }
    }
}

IoC.cs のマッピングに StructureMap を使用しています

...
x.For<IPostsDataSource>().HttpContextScoped().Use<PostsDB>();
...

私の HomeController では、私は

private IPostDataSource _db;

public HomeController(IAdsDataSource db)
{
    _db = db;
}

すべての投稿を取得できます_db.Posts

public ActionResult Index()
    {
        var Posts= _db.Posts;
        ViewBag.Posts = Posts;
        return View();
    }

問題は、特定のカテゴリからすべての投稿を取得するために、どのクエリを作成する必要があるかです

4

1 に答える 1

1

カテゴリに投稿のコレクションがある場合、Post エンティティには CategoryID プロパティが必要です。その CategoryID に基づいてクエリを実行できます。

それ以外の場合は、カテゴリをクエリして、対応する投稿のリストを取得できます。

var cat = _db.Categories.Where(a => a.Id == catId).FirstOrDefault();
if(cat != null)
    ViewBag.Posts = cat.Posts;
return View();
于 2013-01-14T08:24:08.010 に答える