[英]Can't connect from the Docker container with ASP.NET Core to SQL Server container
[英]Asp.net Core and Entity Framework can't connect to SQL Server
我创建了一个ASP.NET Core项目和一个ID为DAL(数据访问层)的单独项目。 在DAL项目中,我有一个非常简单的上下文。
public class AtfContext : DbContext
{
public DbSet<Address> Addresses { get; set; }
public DbSet<EmployeeType> EmployeeTypes { get; set; }
public DbSet<Employee> Employees { get; set; }
}
我也将在此处定义IRepository
和Repository
。
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;
}
}
我认为您不需要实体。
所以我开始构建一个简单的控制器
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();
}
}
索引视图如下所示:
@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>
可能也应该显示project.json
。
{
"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%" ]
}
}
好的,现在来解释什么是错的。 我设置了一个全部为控制台的测试项目,并运行Console.WriteLine(repository.FindAll().Count())
,得到的计数为2。在asp.net核心应用程序中,我得到了0条显示的记录。
谁能解释为什么?
您将需要在启动中配置连接字符串,并使用依赖项注入来获取数据库上下文的实例。 查看官方文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.