I have created an ASP.NET Core project and a separate project that id the DAL (Data Access Layer). In the DAL project, I have a context that is very simple.
public class AtfContext : DbContext
{
public DbSet<Address> Addresses { get; set; }
public DbSet<EmployeeType> EmployeeTypes { get; set; }
public DbSet<Employee> Employees { get; set; }
}
I will define IRepository
and Repository
here too.
public interface IRepository<T> where T : class, IEntity
{
void Add(T entity);
T Find(int id);
IEnumerable<T> FindAll();
void Delete(int id);
void Delete(T entity);
int Save();
}
public class Repository<T> : IRepository<T> where T : class, IEntity
{
private AtfContext _context;
public Repository()
{
_context = new AtfContext();
}
public void Add(T entity)
{
_context.Set<T>().Add(entity);
}
public void Delete(T entity)
{
_context.Set<T>().Remove(entity);
}
public void Delete(int id)
{
var entity = Find(id);
Delete(entity);
}
public T Find(int id)
{
return _context.Set<T>().FirstOrDefault(x => x.Id == id);
}
public IEnumerable<T> FindAll()
{
return _context.Set<T>();
}
public int Save()
{
try
{
return _context.SaveChanges();
}
catch (Exception)
{
}
return 0;
}
}
I don't think you need the entities.
So I started building a vary simple controller
public class EmployeeController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
IRepository<Employee> repository = new Repository<Employee>();
var employees = repository.FindAll().ToList();
return View(employees);
}
public IActionResult Add()
{
var model = new Employee();
return View();
}
}
The index view looks like:
@model IEnumerable<Atf.DataAccess.Models.Employee>
@{
ViewBag.Title = "Home";
}
<div id="main">
<h2>Employees</h2>
</div>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone</th>
<th>Zip</th>
</tr>
@foreach (var employee in @Model)
{
<tr>
<td>@employee.FirstName</td>
<td>@employee.LastName</td>
<td>@employee.MobilePhone</td>
<td>@employee.Address.Zip</td>
</tr>
}
</table>
Probably should show project.json
too.
{
"dependencies": {
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0",
"EntityFramework": "6.1.3",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0"
},
"tools": {
"BundlerMinifier.Core": "2.0.238",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net452": {
"dependencies": {
"Atf.DataAccess": {
"target": "project"
}
}
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Okay, so now to explain what is wrong. I set up a test project that is a console all and ran Console.WriteLine(repository.FindAll().Count())
and I got a count of 2. In the asp.net core app I get 0 records that show up.
Can anyone explain why?
You'll need to configure the connection string in your Startup, and use dependency injection to pull in an instance of the db context. See the official docs:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.