[英]Entity Framework trouble - ASP.NET 4 MVC 3 - SportsStore Project
[英]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
訪問器將實體添加到存儲庫似乎不合適 - 通常存儲庫具有一次在一個實體上工作的Save
或Update
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.