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);

  • 相关阅读:
    [ 转载 ] Java基础4--Java中的static关键字解析
    [ 原创 ]新手作品-我的第一款安卓自学作品---YY音乐诞生了
    [ 转载 ]学习笔记-svn用法详解
    [ 原创 ]学习笔记-Android 学习笔记 Contacts (一)ContentResolver query 参数详解 [转载]
    [ 原创 ]学习笔记-Android 中关于Cursor类的介绍
    《JavaScript DOM 编程艺术 第 2 版》
    test-ra
    2019-4-22
    《写给大家看的设计书》
    2018-5
  • 原文地址:https://www.cnblogs.com/dxh0535/p/9937411.html
Copyright © 2011-2022 走看看