我在代码中返回null:(var cat line)
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; }
}
}
我做错了什么?
答案 0 :(得分: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
}
}
然后,您需要在viewmodel中添加一行:
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;
}
}
答案 1 :(得分:1)
您没有将null
的任何内容设置为Categories
对象中的ICategoriesRepository
属性,并且您不能使用给定的接口。你有一个带有自动吸气器的房产,没有安装者。这意味着它只能返回null
。如果有一个setter(公共或私有),那么你将能够将其设置为其他东西。 (您还需要有一行实际执行此操作的代码。)您还可以使用实际返回除了支持字段之外的其他内容的自定义getter。 (这对于派生数据来说很常见。)