예제 #1
0
        // 注入数据库上下文
        public void Clear(RecordDbContext context)
        {
            _logger.LogDebug("Invoke the AutoClearJob");

            // 查询未签退列表
            var unsignOutList = (from r in context.Records
                                 where r.SignOutTime == null
                                 select r).ToList();

            // 对未签退的人进行处理
            foreach (var record in unsignOutList)
            {
                if (record.IsTimeOut())
                {
                    record.SignOutWithTimeOut();
                }
                else
                {
                    record.SignOut();
                }
            }

            // 写入数据库
            try
            {
                context.UpdateRange(unsignOutList);
                context.SaveChanges();
            }
            catch (Exception e)
            {
                _logger.LogError(e.Message);
            }
        }
 public IEnumerable <Record> GetRecordsByRequestNumber(Guid requestNumber)
 {
     using (var db = new RecordDbContext())
     {
         var records = (from record in db.Records where record.RequestNumber.Equals(requestNumber) select record);
         return(records.ToList());
     }
 }
 public IEnumerable <Record> Get()
 {
     using (var db = new RecordDbContext())
     {
         var records = (from record in db.Records select record);
         return(records.ToList());
     }
 }
 public Guid Save(Record record)
 {
     using (var db = new RecordDbContext())
     {
         var requestNumber = new Guid();
         record.RequestNumber = requestNumber;
         db.Records.Add(record);
         db.SaveChanges();
         return(requestNumber);
     }
 }
예제 #5
0
 public static void RecordTime(string process)
 {
     using (var dbContext = new RecordDbContext())
     {
         dbContext.TimeRecords.Add(
             new timeRecord()
         {
             Time = DateTime.Now.ToString(), Process = process
         }
             );
         dbContext.SaveChanges();
     }
 }
 public Guid Save(IEnumerable <Record> recordList)
 {
     using (var db = new RecordDbContext())
     {
         var requestNumber = Guid.NewGuid();
         foreach (var record in recordList)
         {
             record.RequestNumber = requestNumber;
         }
         db.Records.AddRange(recordList);
         db.SaveChanges();
         return(requestNumber);
     }
 }
예제 #7
0
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // 获得学号
            string studentId = value as string;
            // 获取数据库上下文
            RecordDbContext dbContext =
                (RecordDbContext)validationContext.GetService(typeof(RecordDbContext));
            // 确认签到状态
            bool state = (from r in dbContext.Records.AsNoTracking()
                          where r.SignOutTime == null &&
                          r.StudentId == studentId
                          select r).Count() > 0;

            // 判断状态
            return(_requriedState == state ?
                   ValidationResult.Success :
                   new ValidationResult(FormatErrorMessage("")));
        }
예제 #8
0
        /// <summary>
        /// 确保数据库迁移完成
        /// </summary>
        /// <param name="serviceProvider"></param>
        public static void EnsureMigrate(IServiceProvider serviceProvider)
        {
            Console.WriteLine("Migrating database...");

            using (var scope = serviceProvider.GetRequiredService <IServiceScopeFactory>().CreateScope())
            {
                RecordDbContext context  = scope.ServiceProvider.GetRequiredService <RecordDbContext>();
                bool            retry    = true;
                int             count    = 0;
                int             maxRetry = 5;
                do
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("Stop 1s, wait database start...");

                    try
                    {
                        context.Database.EnsureCreated();
                        retry = false;
                    }
                    catch (Exception)
                    {
                        Console.WriteLine($"Connect Failed...Retry {count}");
                        count++;
                        if (count > maxRetry)
                        {
                            Console.WriteLine("Try too many times");
                            throw;
                        }
                    }
                } while (retry);
            }

            Console.WriteLine("Done migrating database.");
            Console.WriteLine();
        }
예제 #9
0
 public CreateStudentScoreCommandHandler(IBusPublisher busPublisher, ILogger <CreateStudentScoreCommandHandler> logger, RecordDbContext db)
 => (_busPublisher, _logger, _db) = (busPublisher, logger, db);
 public BrowseStudentScoresQueryHandler(RecordDbContext db, IMapper mapper)
 => (_db, _mapper) = (db, mapper);
 public GetRuleQueryHandler(RecordDbContext db, IMapper mapper)
 => (_db, _mapper) = (db, mapper);
 public GetClassReportQueryHandler(RecordDbContext db)
 => (_db) = (db);
 public GetStudentScoreQueryHandler(RecordDbContext db, IMapper mapper)
 => (_db, _mapper) = (db, mapper);
예제 #14
0
        static async Task Main(string[] args)
        {
            const string endpointName = "WeightMonitor.Tracking";

            Console.Title = endpointName;

            var endpointConfiguration = new EndpointConfiguration(endpointName);

            endpointConfiguration.EnableInstallers();
            //if in development
            endpointConfiguration.PurgeOnStartup(true);

            var containerSettings = endpointConfiguration.UseContainer(new DefaultServiceProviderFactory());

            containerSettings.ServiceCollection.AddScoped(typeof(ITrackingService), typeof(Services.TrackingService));
            containerSettings.ServiceCollection.AddScoped(typeof(ITrackingRepository), typeof(TrackingRepository));

            containerSettings.ServiceCollection.AddAutoMapper(typeof(Program));

            using (var recordDbContext = new RecordDbContext(new DbContextOptionsBuilder <RecordDbContext>()
                                                             .UseSqlServer(new SqlConnection((ConfigurationManager.ConnectionStrings["weightMonitorTrackingDBConnectionString"].ToString())))
                                                             .Options))
            {
                await recordDbContext.Database.EnsureCreatedAsync().ConfigureAwait(false);
            }

            /*  containerSettings.ServiceCollection.AddDbContext<RecordDbContext>
             *   (options => options
             *        .UseSqlServer(ConfigurationManager.ConnectionStrings["weightMonitorTrackingDBConnectionString"].ToString()));*/

            /* endpointConfiguration.AuditSagaStateChanges(
             *         serviceControlQueue: "Particular.Servicecontrol");*/

            var appSettings             = ConfigurationManager.AppSettings;
            var auditQueue              = appSettings.Get("AuditQueue");
            var serviceControlQueue     = appSettings.Get("ServiceControlQueue");
            var timeToBeReceivedSetting = appSettings.Get("timeToBeReceived");
            var timeToBeReceived        = TimeSpan.Parse(timeToBeReceivedSetting);

            endpointConfiguration.AuditProcessedMessagesTo(
                auditQueue: auditQueue,
                timeToBeReceived: timeToBeReceived);



            var persistence = endpointConfiguration.UsePersistence <SqlPersistence>();

            var persistenceConnection = ConfigurationManager.ConnectionStrings["persistenceConnection"].ToString();

            var transportConnection = ConfigurationManager.ConnectionStrings["transportConnection"].ToString();



            persistence.SqlDialect <SqlDialect.MsSqlServer>();

            persistence.ConnectionBuilder(
                connectionBuilder: () =>
            {
                return(new SqlConnection(persistenceConnection));
            });


            var outboxSettings = endpointConfiguration.EnableOutbox();


            outboxSettings.KeepDeduplicationDataFor(TimeSpan.FromDays(6));
            outboxSettings.RunDeduplicationDataCleanupEvery(TimeSpan.FromMinutes(15));


            var subscriptions = persistence.SubscriptionSettings();

            subscriptions.CacheFor(TimeSpan.FromMinutes(10));
            var recoverability = endpointConfiguration.Recoverability();

            recoverability.Delayed(
                customizations: delayed =>
            {
                delayed.NumberOfRetries(0);
                delayed.TimeIncrease(TimeSpan.FromMinutes(3));
            });
            recoverability.Immediate(
                customizations: delayed =>
            {
                delayed.NumberOfRetries(1);
            });

            var transport = endpointConfiguration.UseTransport <RabbitMQTransport>();

            transport.UseConventionalRoutingTopology()
            .ConnectionString(transportConnection);

            var routing = transport.Routing();


            var conventions = endpointConfiguration.Conventions();

            conventions.DefiningCommandsAs(type => type.Namespace == "Messages.Commands");
            conventions.DefiningEventsAs(type => type.Namespace == "Messages.Events");
            conventions.DefiningMessagesAs(type => type.Namespace == "Messages.Messages");

            endpointConfiguration.RegisterComponents(c =>
            {
                c.ConfigureComponent(b =>
                {
                    var session = b.Build <ISqlStorageSession>();

                    var context = new RecordDbContext(new DbContextOptionsBuilder <RecordDbContext>()
                                                      .UseSqlServer(session.Connection)
                                                      .Options);

                    //Use the same underlying ADO.NET transaction
                    context.Database.UseTransaction(session.Transaction);

                    //Ensure context is flushed before the transaction is committed
                    session.OnSaveChanges(s =>
                                          context.SaveChangesAsync());

                    return(context);
                }, DependencyLifecycle.InstancePerUnitOfWork);
            });



            var endpointInstance = await Endpoint.Start(endpointConfiguration)
                                   .ConfigureAwait(false);

            Console.WriteLine("Press Enter to exit.");
            Console.ReadLine();

            await endpointInstance.Stop()
            .ConfigureAwait(false);
        }
예제 #15
0
 public HomeController(ILogger <HomeController> logger, RecordDbContext _recordDbContext)
 {
     _logger = logger;
     this.recordDbContext = _recordDbContext;
 }
예제 #16
0
 public BrowseRulesQueryHandler(RecordDbContext db, IMapper mapper)
 => (_db, _mapper) = (db, mapper);
예제 #17
0
 public AddTrackingRecordHandler(RecordDbContext recordDbContext)
 {
     _recordDbContext = recordDbContext;
 }
예제 #18
0
 public RecordController(RecordDbContext context)
 {
     _context = context;
 }
 public UpdateRuleCommandHandler(IBusPublisher busPublisher, ILogger <UpdateRuleCommandHandler> logger, RecordDbContext db)
 => (_busPublisher, _logger, _db) = (busPublisher, logger, db);
예제 #20
0
 public RecordController(
     RecordDbContext context, ILogger <RecordController> logger)
 {
     _context = context;
     _logger  = logger;
 }