簡體   English   中英

不在sportsstore asp.net mvc 5中實現接口

[英]Does Not Implement Interface in sportsstore 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; }
        }       
    }
}

在 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; }
    }
}

為什么我在 EFProductRepository.cs 類中出現錯誤?

因為您沒有為該屬性實現設置器。 查看接口的定義:

IEnumerable<Product> Products { get; set; }

看看你的實現:

public IEnumerable<Product> Products
{
    get { return context.Products; }
}

您需要在屬性中實現一個set ,或者從接口定義中刪除set 鑒於該屬性的實現,我猜后者更合適。


如果它有幫助,因為看起來您正在為實體框架對象構建存儲庫,這就是我的一個通常的樣子:

public interface ProductRepository
{
    IQueryable<Product> Products { get; }
    void Add(Product model);
    void Remove(Product model);
}

和實施:

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

通常,它位於一個工作對象單元中,該對象擴展DbContext並處理將更改提交到其存儲庫。 (這也是將DbSet<>傳遞給存儲庫的構造函數的原因。)實際上,我今天剛剛在博客中介紹了此設置。

該錯誤似乎很明顯 - 您需要為您的屬性添加一個set訪問器或將其從界面中刪除。 在您的情況下,將其從界面中刪除可能更有意義:

namespace SportsStore.Domain.Abstract
{
    public interface IProductRepository
    {
        IEnumerable<Product> Products { get; /*set;*/ }
    }
}

通過set訪問器將實體添加到存儲庫似乎不合適 - 通常存儲庫具有一次在一個實體上工作的SaveUpdate方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM