• 笔试考试系统--配置EF;运行单元测试


    今天完成了ExamOnLine.Service层,EF和ExamDbContext的配置

    工作量相对来说还是比较大的,

    EF的配法:

    首先配置Entities

    每一个Entities对应数据库中的一张表,里面写这些内容

     public class StudentEntities
        {
            public int Id { get; set; }
            /// <summary>
            /// 学生账号
            /// </summary>
            public string StudentNumber { get; set; }
            /// <summary>
            /// 姓名
            /// </summary>
            public string StudentName { get; set; }
            /// <summary>
            /// 密码
            /// </summary>
            public string StudentPwd { get; set; }
            /// <summary>
            /// 学生性别
            /// </summary>
            public string StudentSex { get; set; }
            /// <summary>
            /// 主修专业
            /// </summary>
            public string StudentMajor { get; set; }
            /// <summary>
            /// 学生所在班级
            /// </summary>
            public string StudentClass { get; set; }
            /// <summary>
            /// 学生所在学校
            /// </summary>
            public string StudentShcool { get; set; }
    
        }

    接下来配Config

     里面代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data.Entity.ModelConfiguration;
    using ExamOnLine.Service.Entities;
    
    namespace ExamOnLine.Service.Configs
    {
        //和数据库表的对应关系
        //让程序EF自动生成数据库表
        class StudentConfig:EntityTypeConfiguration<StudentEntities>
        {
            public StudentConfig()
            {
                ToTable("Student");
                //姓名这一列是必须的,并且最大长度是20
                Property(e => e.StudentName).IsRequired().HasMaxLength(20);
    
            }
        }
    }

    陪完这些,接下来就是ExamDbContext文件的书写,添加ExamDbContext

    内容代码如下:

     public class ExamDbContext:DbContext
        {
            private static ILog log = LogManager.GetLogger(typeof(ExamDbContext));//声明Log4NET对象,建议一个类就声明一个ILog对象
            public ExamDbContext():base("name=connStr")
            {
                //将EF生成的SQL语句记录在日志里面
                this.Database.Log = (sql) =>
                {
                    log.DebugFormat("EF开始执行sql语句{0}", sql);
                };
    
                Database.SetInitializer<ExamDbContext>(null);//只要数据库建造好后,就加上这句话,禁止Ef再去帮你创建数据库的一些操作
            }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
            }
    
            //属性类
            public DbSet<StudentEntities> Students { get; set; }
    
            public DbSet<QuestionsEntities> Questionses { get; set; }
            public DbSet<StudentAnswerEntities> StudentAnswers { get; set; }
            public DbSet<StudentExamInfoEntities> StudentExamInfoes { get; set; }
            public DbSet<StudentScoreEntities> StudentScores { get; set; }
            public DbSet<SubjectEntities> Subjects { get; set; }
            public DbSet<TeacherEntities> Teachers { get; set; }
            public DbSet<TestPaperEntities> TestPapers { get; set; }
    
            public DbSet<TestPaperSubjectEntities> TestPaperSubjects { get; set; }
    
        }

    配完这些,EF的内容代码部分就基本上写完了

    但是后面的操作一样很重要,

    在页面部分 Web.config文件中添加连接字符串,前后端都要加

      <!--连接字符串-->
      <connectionStrings>
        <add name="connStr" connectionString="Data Source=.;Initial Catalog=HPStudentExamSystem;Integrated Security=True" providerName="System.Data.SqlClient"/>  
      </connectionStrings>

    接着添加单元测试

     

     ,单元测试同意需要安装Log4.NET和 EntityFrameWork

    之后运行测试即可

    如果你的测试是这样的,那就通过了

    如果是这样的

     就根据错误信息,查找问题,处理后再测试即可

     ,我今天就是遇到了这样的问题,原因是数据库的主外键关系没有在表中体现,后来改了之后就好了

    程序遇到问题是非常影响项目进度的,希望以后自己代码逻辑都可以再熟练一些吧,加油!

  • 相关阅读:
    基于flash的web视频对讲直播测试
    终于放弃Windows下丑陋的cmd
    直播推流兼容性问题追踪
    32位和64位dll判断
    H264编码参数的一些小细节
    cmake编译win下64位obs
    The certificate used to sign "XXX" has either expired or has been revoked
    记录一次Android交叉编译ffmpeg排查错误
    SDK "iphoneos" cannot be located
    av_interleaved_write_frame 网络不好的情况下返回较慢
  • 原文地址:https://www.cnblogs.com/JuneDream/p/13332253.html
Copyright © 2020-2023  润新知