2013-01-14 23 views
0

我在我的asp.net mvc 4测试项目中使用数据库上下文方法。数据库上下文 - 查询从一个类别中选择帖子

这里是我的领域类

Category.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; } 
    } 
} 

我使用StructureMap映射 IoC.cs

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

检索所有帖子问题m是我应该写什么查询以检索特定类别的所有帖子

回答

1

如果某个类别具有帖子集合,则Post实体应具有CategoryID属性。您可以在该CategoryID上查询基础。

否则,您可以查询类和检索的帖子对应的列表:

var cat = _db.Categories.Where(a => a.Id == catId).FirstOrDefault(); 
if(cat != null) 
    ViewBag.Posts = cat.Posts; 
return View(); 
+0

TNX :)这是快速 – ZedBee

+0

你也可以做_db.Categories.FirstOrDefault(A => a.Id == CATID ).Posts或_db.Categories.Find(catId).Posts; –

+0

如果未找到类别,代码将引发异常 – phnkha

相关问题