1

我在我的代码中返回一个空值:(var cat 行)

public class CategoryItemsViewModel
{
    public ICategoriesRepository categoriesRepository;

    public IEnumerable<Categories> GetCategories()
    {
        var cat = categoriesRepository.Categories;

        return cat;

    }
}

这是界面:

namespace SportsStore.Domain.Abstract
{
    public interface ICategoriesRepository
    {
        IQueryable<Categories> Categories { get; }
        void SaveCategory(Categories category);
        void DeleteCategory(Categories category);
    }
}

这是课程:

namespace SportsStore.Domain.Entities
{
    public class Categories
    {
        [Key]
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
    }

}

我究竟做错了什么?

4

2 回答 2

2

到目前为止,您所拥有的一切都很好-只是不完整。

您也不需要其他人建议的二传手——事实上,在这种情况下,最好不要二传手。

您确实需要接口 ICategoriesRepository 的具体实现,例如:

public class CategoriesRepository : ICategoriesRepository
{
    private readonly ModelContainer db= new ModelContainer();

    public IQueryable<Categories> Categories 
    { 
        get
        {
            return this.db.Categories;
        }
    }

    public void SaveCategory(Categories category)
    {
        // TODO
    }

    public void DeleteCategory(Categories category)
    {
        // TODO
    }
}

然后您需要在视图模型中添加一行:

public class CategoryItemsViewModel
{
    public ICategoriesRepository categoriesRepository;

    public IEnumerable<Categories> GetCategories()
    {
        // This is to instantiate your repository.  It may be a better idea to do this
        // when it is declared, above.
        categoriesRepository = new CategoriesRepository();

        var cat = categoriesRepository.Categories;

        return cat;

    }
}
于 2012-08-10T20:58:28.600 回答
1

您没有对对象null中的Categories属性进行任何设置ICategoriesRepository,并且您不能使用给定的接口设置任何内容。您有一个带有自动 getter 和 no setter 的属性。这意味着它永远只能返回null。如果有一个设置器(公共或私有),那么您可以将设置为其他东西。(您还需要有一行代码来实际执行此操作。)您还可以使用自定义 getter,它实际上返回的内容不仅仅是支持字段。(这对于派生数据很常见。)

于 2012-08-10T20:42:36.710 回答