zoukankan      html  css  js  c++  java
  • 项目笔记一:新建Razor实现多表联合查询

    新建一个ZP的项目
    第一步:创建实体类,完善实体类主外键关系.


    第二部:新建前台页面文件夹Page/Ent,搭建机架,系统自动创建了以下内容:
    1.机架带有的页面列表和增删改查.
    2.创建了Data/ZPContext.cs数据库
    3.在Startup.cs注入数据连接.

     services.AddDbContext<ZPContext>(options =>
                        options.UseSqlServer(Configuration.GetConnectionString("ZPContext")));

    4.在appsettings.json添加了数据连接字符串.(需要修改下数据库名称等信息)修改后为

      "ConnectionStrings": {
        "ZPContext": "Server=.;Database=ZP5;Trusted_Connection=True;MultipleActiveResultSets=true"
      }

    这时运行会报错.因为没有自动创建数据库.
    5.修改Program.cs,若没有数据库自动创建.修改Main方法.

    var host = CreateWebHostBuilder(args).Build();
    
                using (var scope = host.Services.CreateScope())
                {
                    var services = scope.ServiceProvider;
    
                    try
                    {
                        var context = services.GetRequiredService<ZPContext>();
                        context.Database.EnsureCreated();
                    }
                    catch (Exception ex)
                    {
                        var logger = services.GetRequiredService<ILogger<Program>>();
                        logger.LogError(ex, "An error occurred creating the DB.");
                    }
                }
    
                host.Run();

     6.运行项目,自动创建数据库ZP5

     添加数据进行测试.发现多表联合查询不好用,取不出数据.

    7.使用EF CORE 根据数据库重新反向生成实体和数据连接.(因为已经存在DATA文件夹实体数据连接.会有错误,把DATA文件夹删除即可.)此时运行,多表联合查询同样不好用.

    8.删除Page/Ent文件夹,重新建立Ent文件夹,重新搭建机架项目.若数据对应关系正确,应该,多表联合查询,已经可以了.因为自动添加了多表联合查询语句.

    Company = await _context.Company
                    .Include(c => c.AreaInfo).ToListAsync();

     第一节到此结束.

    完善:

    1.防止过多发布被黑客利用,对创建页面进行处理.(只更新给出的字段.)

    系统自动给出的代码为

    _context.Student.Add(emptyStudent);
            await _context.SaveChangesAsync();
            return RedirectToPage("./Index");

    修改位以下相同代码用***代替了

    var emptyStudent = new Student();
    
        if (await TryUpdateModelAsync<Student>(
            emptyStudent,
            "student",   // Prefix for form value.
            s => s.FirstMidName, s => s.LastName, s => s.EnrollmentDate))
        {
           ****
        }
    
        return null;

     2.FirstOrDefaultAsync 更改为

    Student = await _context.Student.FirstOrDefaultAsync(m => m.ID == id);

     Student = await _context.Student.FindAsync(m => m.ID == id);

     提示:无法将Lambda表达式转换为类型Object,原因是它不是委托类型.

     Student = await _context.Student.FindAsync(id);

  • 相关阅读:
    GDI+学习之------色彩与图像
    2015小米暑期实习笔试题_懂二进制(位运算)
    拷贝构造函数和赋值函数
    HDU
    react-router中,<switch>
    Navicat for MySQL
    maven项目创建3 (依赖版本冲突)
    maven项目创建2
    maven项目创建
    Eclipse 开发环境修改及MAVEN配置
  • 原文地址:https://www.cnblogs.com/dxh0535/p/9937411.html
Copyright © 2011-2022 走看看