如何访问代码优先数据库中的表?

时间:2019-07-16 12:21:50

标签: c# sql asp.net asp.net-core-mvc

对于我的项目,我想访问数据库,但是我不知道,因为这是我第一次使用ASP.net mvc进行编程。

我已经阅读了一堆指南,但无济于事。


控制器 这是我的控制器,它从计算机(例如:123456)获取代码,但是当我想通过此选项访问数据库时,我得到尚未为此DbContext配置数据库提供程序。消息。

namespace Qualitätskontrolle.Controllers
{
    public class HomeController : Controller
    {


        [HttpGet]
        public IActionResult StartPage(string Code)
        {
            Debug.WriteLine(Code);
            ApplicationDbContext dbContext = new ApplicationDbContext(.);

            var dbErgebnisse =  dbContext.Result.ToList();
            for (int i = 0; i < dbErgebnisse.Count; i++)
            {
                Debug.WriteLine(dbErgebnisse[i]);
            }
            return View();
        }
}

上下文类 我已经读过应该删除空的构造函数,但随后无法在Controller类中访问它。

namespace Qualitätskontrolle.Data
{
    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext()
        {
        }

        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }


        public DbSet<Bilder> Bilder { get; set; }
        public DbSet<Prüfungen> Prüfungen { get; set; }
        public DbSet<Ergebnis> Result { get; set; }
        public DbSet<Typen> Typen { get; set; }
        public DbSet<Typen_Pruefungen_Bilder> Typen_Pruefungen_Bilder { get; set; }

        public DbSet<Einstellungen_KoordinatenSys> Einstellungen_KoordinatenSys { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<Einstellungen_KoordinatenSys>()
                .HasKey(c => new { c.ID, c.BildID });

            modelBuilder.Entity<Ergebnis>()
                .HasKey(c => new { c.BildID, c.TypenID, c.PruefungenID, c.BauTeilId });

            modelBuilder.Entity<Typen_Pruefungen_Bilder>()
                 .HasKey(c => new { c.PruefungenID, c.TypenID });


        }
    }
}

模型 这是我需要的模型。我特别需要控制器类的 BauTeilId

namespace Qualitätskontrolle.Models
{
    public class Ergebnis
    {

        [Key]
        public int TypenID { get; set; }

        [Key]
        public int PruefungenID { get; set; }

        [Key]
        public int BildID { get; set; }

        [Key]
        [StringLength(254)]
        public string BauTeilId { get; set; }

        public DateTime Date { get; set; } = DateTime.Now;

        public string XLabel { get; set; }

        public int? X { get; set; }

        public string YLabel { get; set; }

        public int? Y { get; set; }

        public string FehlerCode { get; set; }

        public string FehlerName { get; set; }

        public string FehlerGruppe1 { get; set; }

        public string FehlerGruppe2 { get; set; }

        public int Result { get; set; }
        //1=IO 2=NIO

    }

结果应为 BauTeilId 列表,然后可以从控制器中使用 Code 进行检查。

如果您需要更多信息,我会尽快答复。

2 个答案:

答案 0 :(得分:1)

我假设它不是asp.net mvc核心。 您应该创建实现DbContext的单独类,例如

public class ApplicationCustomDbContext : DbContext
{
    public ApplicationCustomDbContext () : base("name=DefaultConnectionCustom")
    {
    }

    // DbSet for your Entities
}

在web.config中,您应该使用特定的连接字符串,例如

<connectionStrings>
<add name="DefaultConnectionCustom" providerName="System.Data.SqlClient" connectionString="___" />
</connectionStrings>

答案 1 :(得分:0)

有多个问题。

  1. 对于.net核心中的ApplicationDbContext,您应该像下面在Startup.cs

    中进行注册
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            context.Configuration.GetConnectionString("ApplicationDbContextConnection")));
    
  2. 对于连接字符串,您可以像

    这样在appsettings.json中进行配置
    {
        "ConnectionStrings": {
            "ApplicationDbContextConnection": "Server=(localdb)\\mssqllocaldb;Database=CoreMVC2_2;Trusted_Connection=True;MultipleActiveResultSets=true"
        }
    }
    
  3. 要使用,可以从

    这样的结构中解析
    public class HomeController : Controller
    {       
        private readonly ApplicationDbContext _context;       
        public HomeController(ApplicationDbContext context)
        {
            _mapper = mapper;
            _context = context;
            _userManager = userManager;
            _userStore = userStore;
        }
        public async Task<IActionResult> Index()
        {
    
            var existingStudent = _context.Result.ToList();           
            return View();
        }        
    }