不在sportsstore asp.net mvc 5中实现接口

Laz*_*ale 1 c# asp.net asp.net-mvc interface asp.net-mvc-5

我正在通过apress关注asp.net mvc 5的书,我遇到了这个错误:

"SportsStore.Domain.Concrete.EFProductRepository'未实现接口成员'SportsStore.Domain.Abstract.IProductRepository.Products.set"

这就是我在EFProductRepository中所拥有的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportsStore.Domain.Abstract;
using SportsStore.Domain.Entities;

namespace SportsStore.Domain.Concrete
{
    public class EFProductRepository : IProductRepository
    {
        public EFDbContext context = new EFDbContext();

        public IEnumerable<Product> Products
        {
            get { return context.Products; }
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

在IProductRepository我有:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SportsStore.Domain.Entities;

namespace SportsStore.Domain.Abstract
{
    public interface IProductRepository
    {
        IEnumerable<Product> Products { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

知道为什么我在EFProductRepository.cs类中收到错误吗?提前感谢Laziale的每一个建议

Dav*_*vid 5

因为您没有为该属性实现setter.看一下界面的定义:

IEnumerable<Product> Products { get; set; }
Run Code Online (Sandbox Code Playgroud)

看看你的实现:

public IEnumerable<Product> Products
{
    get { return context.Products; }
}
Run Code Online (Sandbox Code Playgroud)

您需要set在属性中实现a ,或set从接口定义中删除.鉴于该物业的实施,我猜测后者更合适.


如果它有帮助,因为看起来你正在构建Entity Framework对象的存储库,这是我的一般看起来像:

public interface ProductRepository
{
    IQueryable<Product> Products { get; }
    void Add(Product model);
    void Remove(Product model);
}
Run Code Online (Sandbox Code Playgroud)

和实施:

public class ProductRepositoryImplementation : ProductRepository
{
    private DbSet<Product> _products;

    public IQueryable<Product> Products
    {
        get { return _products; }
    }

    public ProductRepositoryImplementation(DbSet<Product> products)
    {
        _products = products;
    }

    public void Add(Product model)
    {
        _products.Add(model);
    }

    public void Remove(Product model)
    {
        _products.Remove(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,它位于工作对象单元内,工作对象扩展DbContext并处理将更改提交到其存储库.(这也是传递DbSet<>给存储库的构造函数的东西.)我今天刚刚在博客上写了这个设置.