2016-08-18 1 views
0

Имея некоторые проблемы с получением моего репозитория для извлечения информации - продолжает возвращаться null. Любые мысли были бы оценены - новые для этого и преподавания.C# Entity Framework Core & Repository

Repository:

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

} 

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; } 
} 
+0

Возможно, это не решение вашей проблемы, но почему вы используете список при возврате ienumerable? Это трата ресурсов;) –

+0

И я понял, что вы, чем Бросьте его, когда используете этот метод. Это тройной литой –

+0

О да, вам не нужно создавать экземпляр CustomerRepository. Вы используете инъекцию Depenency? –

ответ

1

Я думаю, что нужно создавать экземпляры Контекстное и ваш репозиторий. Так что в вашем контроллере вам нужно что-то вроде этого:

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

Я предполагаю, что вы не используете Dependency Injection ... если так вам просто нужно создать конструктор для вашего контроллера, который принимает в качестве аргумента CustomerRepository:

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

Если вы не настроили свой контекст базы данных, смотрите здесь: https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html Это позволит вам, чем инъекции зависимостей. Все вы, чем необходимость сделать для Repository является использование

services.AddScoped<ICustomerRepository, 
    CustomerRepository>(); 

И я думаю, что это может быть хорошо, чтобы удалить ToList() в Repository классе и удалить Cast List<Customer> в контроллере и использовать ToList() вместо этого, если это на самом деле необходимо. Потому что, если вы используете его в представлении, ienumerable также может работать.

+0

Спасибо за это - я думал, что это что-то по этой линии, но у меня теперь возникают проблемы с новым masterContect - говорит, что нет аргументов, которые соответствуют или не соответствуют требуемым формальным параметрам paramContext.masterContext. Включил мастер-конт выше в исходном фиде - не могли бы вы помочь? – Webezine

+1

Вы настроили его в файле Startup.cs? –

+0

Большое спасибо за помощь - это указывало на меня в правильном направлении, и я смог решить проблему и теперь имею рабочую модель. Еще раз, спасибо!! – Webezine