C#Entity Frameworkコア&リポジトリ

entity-framework-core repository-pattern

質問

情報を取得するためにリポジトリを取得する際にいくつかの問題があります。どんな思考も高く評価されます。

リポジトリ:

 public class CustomerRepository : ICustomerRepository
{
    private masterContext context;

    public CustomerRepository(masterContext context)
    {
        this.context = context;

    }
    public IEnumerable<Customer> GetCustomers()
    {
        return context.Customer.ToList();
    }

    public Customer GetCustomerById(int customerId)
    {
        var result = (from c in context.Customer where c.CustomerId == customerId select c).FirstOrDefault();
        return result;
    }

    public void Save()
    {
        context.SaveChanges();
    }

コントローラ:

   public class CustomerController : Controller
{
    private readonly ICustomerRepository _repository = null;


    public ActionResult Index()
    {
        var model = (List<Customer>)_repository.GetCustomers();
        return View(model);
    }

    public ActionResult New()
    {
        return View();
    }

}

私がefcを作成したMasterContextは、

 public partial class masterContext : DbContext
{
    public masterContext(DbContextOptions<masterContext> options)
        : base(options)
    { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>(entity =>
        {
            entity.Property(e => e.CustomerName).IsRequired();
        });
    }

    public virtual DbSet<Customer> Customer { get; set; }
    public virtual DbSet<Order> Order { get; set; }
}

受け入れられた回答

私は、コンテキストとリポジトリのインスタンスを作成する必要があると思います。コントローラーには次のようなものが必要です:

private masterContext context = new masterContext();
private ICustomerRepository repository = new CustomerRepository(context);

私はあなたがDependency injectionを使用していないと仮定します。もしそうなら、単にあなたのController用のConstructorを作成して、CustomerRepositoryを引数として取る必要があります:

public CustomerController(ICustomerRepository _repository) {
    repository = _repository;
}

データベースコンテキストを設定していない場合は、こちらをご覧くださいhttps : //docs.efproject.net/en/latest/platforms/aspnetcore/new-db.htmlこれは依存関係注入を可能にするでしょう。リポジトリのために必要なものはすべて、

services.AddScoped<ICustomerRepository,
    CustomerRepository>();

そして、RepositoryクラスのToList()を削除し、コントローラ内のCast List<Customer>を削除し、本当に必要な場合は代わりにToList()を使用するとToList()と思います。ビューでそれを使用している場合は、ienumerableも機能する可能性があるためです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ