繁体   English   中英

Asp.net Core和Entity Framework无法连接到SQL Server

[英]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; }
}

我也将在此处定义IRepositoryRepository

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条显示的记录。

谁能解释为什么?

您将需要在启动中配置连接字符串,并使用依赖项注入来获取数据库上下文的实例。 查看官方文档:

https://docs.efproject.net/zh_CN/latest/platforms/aspnetcore/new-db.html#register-your-context-with-dependency-injection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM