예제 #1
0
파일: WebHelper.cs 프로젝트: yuanfei05/vita
 public static void ConfigureSlimApi(HttpConfiguration config, EntityApp app) {
   var actionSelector = new SlimApiActionSelector(app.ApiConfiguration);
   config.Services.Replace(typeof(System.Web.Http.Controllers.IHttpActionSelector), actionSelector);
   var prov = new SlimApiDirectRouteProvider();
   config.MapHttpAttributeRoutes(prov);
  // config.ParameterBindingRules.Add(typeof(DateTime), p => new DateTimeParameterBinding(p));
 }
예제 #2
0
        public EntityApp Build(DbFirstConfig config)
        {
            _config = config;
            _app    = new EntityApp();
            var log = new ActivationLog(_app.ActivationLogPath);

            _dbSettings = new DbSettings(_config.Driver, config.Driver.GetDefaultOptions(), _config.ConnectionString);
            // create loader and setup filter
            var modelLoader = _config.Driver.CreateDbModelLoader(_dbSettings, log);

            modelLoader.SetSchemasSubset(_config.Schemas);
            //actually load model
            _dbModel = modelLoader.LoadModel();
            Util.Check(_dbModel.Tables.Count() > 0, "No tables found in the database. Code generation aborted.");
            // Prepare type generator
            _tempNamespace = "_dummy_" + _callCount++; // artificial unique namespace for dummy interface types
            // Construct model setup and model
            GenerateModulesAndAreas();
            _entityModel = new EntityModel(_app);
            // EntityModelBuilder.SetModel(_app, _entityModel);
            //generate entities and members
            GenerateEntities();
            SetupPrimaryKeys();
            GenerateReferenceMembers();
            CreateIndexes();
            SetupKeyMembers();
            return(_app);
        }
예제 #3
0
        // constructors
        public Database(EntityApp app, DbSettings settings)
        {
            _app         = app;
            Settings     = settings;
            _driver      = Settings.ModelConfig.Driver;
            _entityModel = app.Model;
            _timeService = _app.TimeService;
            //Set list of all schemas
            var allSchemas = app.Areas.Select(a => settings.ModelConfig.GetSchema(a));

            settings.SetSchemas(allSchemas);

            //Check if model is shared
            var  modelConfig   = Settings.ModelConfig;
            bool modelIsShared = modelConfig.Options.IsSet(DbOptions.ShareDbModel);

            lock (modelConfig) { //we need lock to prevent collision on shared model
                if (modelIsShared)
                {
                    DbModel = modelConfig.SharedDbModel;
                }
                if (DbModel == null)
                {
                    var dbmBuilder = new DbModelBuilder(app.Model, modelConfig);
                    DbModel = dbmBuilder.Build();
                    if (modelIsShared)
                    {
                        modelConfig.SharedDbModel = DbModel;
                    }
                }
            }//lock

            //Save
        }
예제 #4
0
        public void RunTestIdentityWithSelfRefEntities()
        {
            _app = new IdentityTestsEntityApp();
            Startup.ActivateApp(_app);
            //if(Startup.ServerType == Data.Driver.DbServerType.SQLite)
            DeleteAllData();
            var session = _app.OpenSession();

            // Create 3-level tree and save it
            var node1 = session.NewNode("N1");

            // level 2
            var node11 = session.NewNode("N11", node1);
            var node12 = session.NewNode("N12", node1);
            var node13 = session.NewNode("N13", node1);

            // level 3
            var node111 = session.NewNode("N1111", node11);
            var node112 = session.NewNode("N1112", node11);
            var node121 = session.NewNode("N1121", node12);
            var node122 = session.NewNode("N1122", node12);
            var node131 = session.NewNode("N1131", node13);
            var node132 = session.NewNode("N1132", node13);

            DataUtility.RandomizeRecordOrder(session);
            session.SaveChanges();

            // test passed if it executed without exceptions
            Assert.IsTrue(true, "never happens");
        }
예제 #5
0
            public WebCallInfo(EntityApp app, WebCallContextHandlerSettings settings,
                               HttpRequestMessage request, CancellationToken cancellationToken)
            {
                Request    = request;
                WebContext = new WebCallContext(request, app.TimeService.UtcNow, app.TimeService.ElapsedMilliseconds,
                                                GetIncomingCookies, GetIncomingHeaderValues);
                WebContext.OperationContext = new OperationContext(app, UserInfo.Anonymous, WebContext, settings.ConnectionReuseMode);
                WebContext.OperationContext.SetExternalCancellationToken(cancellationToken);
                Request.Properties[WebCallContext.WebCallContextKey] = WebContext;
                WebContext.RequestUrl  = request.RequestUri.ToString();
                WebContext.HttpMethod  = request.Method.ToString().ToUpperInvariant();
                WebContext.RequestSize = request.Content.GetLength();
                //Check if it is one of the sensitive URLs
                var path = request.RequestUri.LocalPath;
                // The only way to get IPaddress it seems is thru use of HttpContext (from ASP.NET host).
                // NOTE: it is available only under ASP.NET/IIS host, not in self-hosting scenario
                var ctxWrapper = WebHelper.GetHttpContextWrapper(request);

                if (ctxWrapper != null)
                {
                    //IIS hosting
                    WebContext.Referrer  = ctxWrapper.Request.UrlReferrer + string.Empty;
                    WebContext.IPAddress = ctxWrapper.Request.UserHostAddress;
                }
                else
                {
                    //Self hosting
                    // webCallContext.IPAddress = "(unknown)";
                }
                //Set log level for this call
                WebContext.OperationContext.LogLevel = settings.LogLevel;
            }
예제 #6
0
        public void TestIdentityColumns()
        {
            _app = new IdentityTestsEntityApp();
              SetupHelper.DropSchemaObjects("ident");
              SetupHelper.ActivateApp(_app);
              var session = _app.OpenSession();
              var john = session.NewEntity<IPerson>();
              john.Name = "John S";
              var car1 = session.NewEntity<ICar>();
              car1.Model = "Beatle";
              car1.Owner = john;
              var car2 = session.NewEntity<ICar>();
              car2.Model = "Explorer";
              car2.Owner = john;
              Assert.IsTrue(car1.Id < 0, "Car ID is expected to be <0 before saving.");
              session.SaveChanges();
              //Check that Identity values immediately changed to actual positive values loaded from database
              Assert.IsTrue(john.Id > 0, "Invalid person ID - expected positive value.");
              Assert.IsTrue(car1.Id > 0, "Invalid car1 ID - expected positive value.");
              Assert.IsTrue(car2.Id > 0, "Invalid car2 ID - expected positive value.");

              //Start new session, load all and check that IDs and relationships are correct
              session = _app.OpenSession();
              var persons = session.GetEntities<IPerson>().ToList();
              john = persons[0];
              var cars = session.GetEntities<ICar>().ToList();
              car1 = cars[0];
              car2 = cars[1];
              Assert.IsTrue(john.Id > 0 && car1.Id > 0 && car2.Id > 0, "IDs expected to become > 0 after saving.");
              Assert.IsTrue(car1.Owner == john, "Owner expected to be John");
              Assert.IsTrue(car2.Owner == john, "Owner expected to be John");
        }
예제 #7
0
 public void Init(EntityApp app) {
   _emailService = _app.GetService<IEmailSendService>();
   Util.Check(_emailService != null, "EmailNotificationProvider: failed to retrieve {0} instance.", typeof(IEmailSendService));
   _templateService = _app.GetService<ITemplateTransformService>();
   Util.Check(_templateService != null,
     "EmailNotificationProvider: failed to retrieve {0} instance, add Template module to your app.", typeof(ITemplateTransformService));
 }
예제 #8
0
 public void Init(EntityApp app)
 {
     _errorLog    = app.GetService <IErrorLogService>();
     _timeService = TimeService.Instance;
     _timer       = new Timer(Timer_Elapsed, null, 100, 100);
     app.AppEvents.Initializing += Events_Initializing;
 }
예제 #9
0
 public DbUpgradeManager(Database database, ILog log)
 {
     _database      = database;
     _log           = log;
     _app           = _database.DbModel.EntityApp;
     _dbInfoService = (IDbInfoService)_app.GetService(typeof(IDbInfoService));
 }
예제 #10
0
        public static INotificationService Create(EntityApp app)
        {
            var instance = new NotificationService(app);

            instance.Init(app);
            return(instance);
        }
예제 #11
0
 public EntityApp Build(DbFirstConfig config)
 {
     _config = config;
       _app = new EntityApp();
       var log = _app.ActivationLog;
       _dbSettings = new DbSettings(_config.Driver, DbOptions.Default, _config.ConnectionString);
       _dbSettings.SetSchemas(_config.Schemas);
       var modelLoader = _config.Driver.CreateDbModelLoader(_dbSettings, log);
       _dbModel = modelLoader.LoadModel();
       Util.Check(_dbModel.Tables.Count() > 0, "No tables found in the database. Code generation aborted.");
       // Prepare type generator
       _tempNamespace = "_dummy_" + _callCount++; // artificial unique namespace for dummy interface types
       // Construct model setup and model
       GenerateModulesAndAreas();
       _entityModel = new EntityModel(_app);
       EntityModelBuilder.SetModel(_app, _entityModel);
       _entityModel.ClassesAssembly = new EntityClassesAssembly();
       //generate entities and members
       GenerateEntities();
       SetupPrimaryKeys();
       GenerateReferenceMembers();
       CreateIndexes();
       SetupKeyMembers();
       return _app;
 }
예제 #12
0
        public static void CreateBasicTestData(EntityApp app)
        {
            var session = app.OpenSystemSession();

            session.EnableCache(false);
            Vita.Modules.Login.LoginModule.ImportDefaultSecretQuestions(session);
            session.SaveChanges();
            //Create users
            var stan    = session.CreateUser("Stan", UserType.Customer);
            var linda   = session.CreateUser("Linda", UserType.BookEditor);
            var jessy   = session.CreateUser("Jessy", UserType.CustomerSupport);
            var charlie = session.CreateUser("Charlie", UserType.StoreAdmin);
            var kevin   = session.CreateUser("Kevin", UserType.StoreAdmin);
            //customers
            var dora    = session.CreateUser("Dora", UserType.Customer, email: "*****@*****.**");
            var diego   = session.CreateUser("Diego", UserType.Customer);
            var duffy   = session.CreateUser("Duffy", UserType.Customer);
            var ferb    = session.CreateUser("Ferb", UserType.Customer);
            var cartman = session.CreateUser("Cartman", UserType.Customer, email: "*****@*****.**");

            session.SaveChanges();
            // Setup secret questions for dora
            var doraLogin = session.EntitySet <ILogin>().First(lg => lg.UserName == "dora"); //logins are lower-case, important for Postgres

            SetupSampleSecretQuestions(doraLogin);
            session.SaveChanges();
        }
예제 #13
0
 public SmtpService(EntityApp app, SmtpSettings settings)
 {
     _app      = app;
     _settings = settings;
     _app.RegisterService <ISmtpService>(this);
     _app.RegisterConfig(settings);
 }
예제 #14
0
파일: WebHelper.cs 프로젝트: yuanfei05/vita
    public static void ConfigureWebApi(HttpConfiguration httpConfiguration, EntityApp app, 
                             LogLevel logLevel = LogLevel.Basic,
                             WebHandlerOptions webHandlerOptions = WebHandlerOptions.DefaultDebug) {
      // Logging message handler
      var webHandlerStt = new WebCallContextHandlerSettings(logLevel, webHandlerOptions);
      var webContextHandler = new WebCallContextHandler(app, webHandlerStt);
      httpConfiguration.MessageHandlers.Add(webContextHandler);

      // Exception handling filter - to handle/save exceptions
      httpConfiguration.Filters.Add(new ExceptionHandlingFilter());

      // Formatters - add formatters with spies, to catch/log deserialization failures
      httpConfiguration.Formatters.Clear();
      httpConfiguration.Formatters.Add(new StreamMediaTypeFormatter("image/jpeg", "image/webp")); //webp is for Chrome
      var xmlFmter = new XmlMediaTypeFormatter();
      httpConfiguration.Formatters.Add(xmlFmter);
      var jsonFmter = new JsonMediaTypeFormatter();
      // add converter that will serialize all enums as strings, not integers
      jsonFmter.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
      var resolver = jsonFmter.SerializerSettings.ContractResolver = new JsonContractResolver(jsonFmter);
      httpConfiguration.Formatters.Add(jsonFmter);

      //Api configuration
      if (app.ApiConfiguration.ControllerInfos.Count > 0)
        ConfigureSlimApi(httpConfiguration, app);
    }
예제 #15
0
 public static void CreateBasicTestData(EntityApp app)
 {
     var session = app.OpenSystemSession();
       session.EnableCache(false);
       CreateTextTemplates(session);
       Vita.Modules.Login.LoginModule.ImportDefaultSecretQuestions(session);
       session.SaveChanges();
       //Create users
       var stan = session.CreateUser("Stan", UserType.Customer);
       var linda = session.CreateUser("Linda", UserType.BookEditor);
       var jessy = session.CreateUser("Jessy", UserType.CustomerSupport);
       var charlie = session.CreateUser("Charlie", UserType.StoreAdmin);
       var kevin = session.CreateUser("Kevin", UserType.StoreAdmin);
       //customers
       var dora = session.CreateUser("Dora", UserType.Customer, email: "*****@*****.**");
       var diego = session.CreateUser("Diego", UserType.Customer);
       var duffy = session.CreateUser("Duffy", UserType.Customer);
       var ferb = session.CreateUser("Ferb", UserType.Customer);
       var cartman = session.CreateUser("Cartman", UserType.Customer, email: "*****@*****.**");
       session.SaveChanges();
       // Setup secret questions for dora
       var doraLogin = session.EntitySet<ILogin>().First(lg => lg.UserName == "dora"); //logins are lower-case, important for Postgres
       SetupSampleSecretQuestions(doraLogin);
       session.SaveChanges();
 }
예제 #16
0
        public void TestIdentityColumns()
        {
            _app = new IdentityTestsEntityApp();
            Startup.DropSchemaObjects("ident");
            Startup.ActivateApp(_app);
            var session = _app.OpenSession();
            var john    = session.NewEntity <IPerson>();

            john.Name = "John S";
            var car1 = session.NewEntity <ICar>();

            car1.Model = "Beatle";
            car1.Owner = john;
            var car2 = session.NewEntity <ICar>();

            car2.Model = "Explorer";
            car2.Owner = john;
            Assert.IsTrue(car1.Id < 0, "Car ID is expected to be <0 before saving.");
            session.SaveChanges();
            //Check that Identity values immediately changed to actual positive values loaded from database
            Assert.IsTrue(john.Id > 0, "Invalid person ID - expected positive value.");
            Assert.IsTrue(car1.Id > 0, "Invalid car1 ID - expected positive value.");
            Assert.IsTrue(car2.Id > 0, "Invalid car2 ID - expected positive value.");

            //Start new session, load all and check that IDs and relationships are correct
            session = _app.OpenSession();
            john    = session.EntitySet <IPerson>().Where(p => p.Name == "John S").Single();
            var cars = session.GetEntities <ICar>().ToList();

            car1 = cars[0];
            car2 = cars[1];
            Assert.IsTrue(john.Id > 0 && car1.Id > 0 && car2.Id > 0, "IDs expected to become > 0 after saving.");
            Assert.IsTrue(car1.Owner == john, "Owner expected to be John");
            Assert.IsTrue(car2.Owner == john, "Owner expected to be John");
        }//method
예제 #17
0
 public DefaultOperationLogService(EntityApp app, LogLevel logLevel = Services.LogLevel.Details)
 {
     LogLevel = logLevel;
       _timerService = app.GetService<ITimerService>();
       _timerService.Elapsed1Second += TimerService_Elapsed1Second;
       app.AppEvents.FlushRequested += Events_FlushRequested;
 }
예제 #18
0
 public static EntityApp ActivateApp(EntityApp app, bool updateSchema = true, bool dropUnknownTables = false)
 {
     DeleteLocalLogFiles();
     app.LogPath       = LogFilePath;
     app.SystemLogPath = SystemLogFilePath;
     //If driver is not set, it means we are running from Test Explorer in VS. Use ServerTypeForTestExplorer
     if (Driver == null)
     {
         SetupForTestExplorerMode();
     }
     try {
         app.Init();
         var upgradeMode    = updateSchema ? DbUpgradeMode.Always : DbUpgradeMode.Never;
         var upgradeOptions = DbUpgradeOptions.Default;
         if (dropUnknownTables)
         {
             upgradeOptions |= DbUpgradeOptions.DropUnknownObjects;
         }
         var dbSettings = new DbSettings(Driver, DbOptions, ConnectionString, upgradeMode: upgradeMode, upgradeOptions: upgradeOptions);
         app.ConnectTo(dbSettings);
         return(app);
     } catch (StartupFailureException sx) {
         //Unit test framework shows only ex message, not details; let's write specifics into debug output - it will be shown in test failure report
         Debug.WriteLine("EntityApp init exception: ");
         Debug.WriteLine(sx.Log);
         throw;
     }
 }
예제 #19
0
 public DbUpgradeManager(Database database, IActivationLog log)
 {
     _database      = database;
     _log           = log;
     _app           = _database.DbModel.EntityApp;
     _dbInfoService = _app.GetService <IDbInfoService>(throwIfNotFound: false);
 }
예제 #20
0
        public VitaJwtTokenHandler(EntityApp entityApp, IServiceCollection services, string jwtSecret)
        {
            _entityApp = entityApp;
            _entityApp.RegisterService <IAuthenticationTokenHandler>(this);
            var secretBytes = Encoding.ASCII.GetBytes(jwtSecret);

            _jwtKey = new SymmetricSecurityKey(secretBytes);
            // some cryptic code copied from samples somewhere
            services.AddAuthentication(x => {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x => {
                x.Events = new JwtBearerEvents {
                    OnTokenValidated = OnJwtTokenValidated
                };

                x.RequireHttpsMetadata      = false;
                x.SaveToken                 = true;
                x.TokenValidationParameters = new TokenValidationParameters {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = _jwtKey,
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
            });
        }
예제 #21
0
파일: Database.cs 프로젝트: yuanfei05/vita
        // constructors
        public Database(EntityApp app, DbSettings settings)
        {
            _app = app;
              Settings = settings;
              _driver = Settings.ModelConfig.Driver;
              _entityModel = app.Model;
              _timeService = _app.TimeService;
              //Set list of all schemas
              var allSchemas = app.Areas.Select(a => settings.ModelConfig.GetSchema(a));
              settings.SetSchemas(allSchemas);

              //Check if model is shared
              bool modelIsShared = Settings.ModelConfig.Options.IsSet(DbOptions.ShareDbModel);
              lock (_lock) { //we need lock to prevent collision on shared model
              if (modelIsShared)
            DbModel = Settings.ModelConfig.SharedDbModel;
              if (DbModel == null) {
            var dbmBuilder = new DbModelBuilder(app.Model, settings.ModelConfig, app.ActivationLog);
            DbModel = dbmBuilder.Build();
            if (modelIsShared)
              Settings.ModelConfig.SharedDbModel = DbModel;
              }
            }//lock

              //Save
        }
예제 #22
0
 public void TestInit()
 {
     Startup.InitApp();
     _app            = Startup.BooksApp;
     _timersControl  = _app.GetService <ITimerServiceControl>();
     _jobDiagService = _app.GetService <IJobDiagnosticsService>();
 }
예제 #23
0
        public void RunTest(bool batchMode)
        {
            _app = new IdentityRefTestEntityApp();
            Startup.ActivateApp(_app);
            //if(Startup.ServerType == Data.Driver.DbServerType.SQLite)
            DeleteAllData();
            // We create session this way to set the batch mode flag
            var            ctx     = new OperationContext(_app);
            IEntitySession session = new EntitySession(ctx,
                                                       options: batchMode ? EntitySessionOptions.None : EntitySessionOptions.DisableBatchMode);

            var john   = session.NewUser("john");
            var post1  = john.NewPost("john post 1", 1);
            var post2  = john.NewPost("john post 2", 2);
            var post3  = john.NewPost("john post 3", 3);
            var ben    = session.NewUser("ben");
            var post1b = ben.NewPost("ben post 1", 1);
            var post2b = ben.NewPost("ben post 2", 2);
            var post3b = ben.NewPost("ben post 3", 3);

            session.SaveChanges();
            //Check that Identity values immediately changed to actual positive values loaded from database
            Assert.IsTrue(post1.OrderId > 0, "Invalid OrderID - expected positive value.");
            Assert.IsTrue(post2.OrderId > 0, "Invalid OrderID - expected positive value.");
            Assert.IsTrue(post3.OrderId > 0, "Invalid OrderID - expected positive value.");

            //Start new session, load all and check that IDs and relationships are correct
            session = _app.OpenSession();
            var posts = session.EntitySet <IUserPost>().ToList();

            foreach (var post in posts)
            {
                Assert.IsTrue(post.OrderId > 0);
            }
        }//method
예제 #24
0
 public WebCallContextHandler(EntityApp app, WebCallContextHandlerSettings settings) {
   App = app;
   Settings = settings ?? new WebCallContextHandlerSettings();
   App.RegisterConfig(Settings);
   _webCallLog = App.GetService<IWebCallLogService>();
   _errorLog = App.GetService<IErrorLogService>();
   App.RegisterService<IWebCallNotificationService>(this); 
 }
예제 #25
0
 public void Init()
 {
     if (_app == null)
     {
         _app = new MiscLinqEntityApp();
         Startup.ActivateApp(_app);
     }
 }
예제 #26
0
 public void Init(EntityApp app)
 {
     _smtpService = _app.GetService <ISmtpService>();
     Util.Check(_smtpService != null, "EmailNotificationProvider: failed to retrieve {0} instance.", typeof(ISmtpService));
     _templateService = _app.GetService <ITemplateTransformService>();
     Util.Check(_templateService != null,
                "EmailNotificationProvider: failed to retrieve {0} instance, add Template module to your app.", typeof(ITemplateTransformService));
 }
예제 #27
0
 public static void EnableTimers(EntityApp app, bool enable)
 {
     EnableAppTimers(app, enable);
     foreach (var linked in app.LinkedApps)
     {
         EnableAppTimers(linked, enable);
     }
 }
예제 #28
0
 public void Init(EntityApp app)
 {
     _timerContext = app.CreateSystemContext();
       _logService = app.GetService<IOperationLogService>();
       _timer = new Timer(100);
       _timer.Elapsed += Timer_Elapsed;
       app.AppEvents.Initializing += Events_Initializing;
 }
예제 #29
0
 public DataSource(string name, Database database, CacheSettings cacheSettings = null)
 {
     Database = database;
       App = Database.DbModel.EntityApp;
       Name = database.Settings.DataSourceName;
       if(cacheSettings != null && cacheSettings.HasTypes())
     Cache = new EntityCache(App, cacheSettings, this.Database);
 }
예제 #30
0
 public LogFileWriter(EntityApp app, string logPath)
 {
     _app                 = app;
     LogPath              = logPath;
     _logService          = app.GetService <IOperationLogService>();
     _saveService         = app.GetService <IBackgroundSaveService>();
     _saveService.Saving += SaveService_Saving;
 }
예제 #31
0
 public DbVersionInfo(EntityApp app, DbModelConfig config)
 {
     Version = app.Version;
       foreach (var m in app.Modules) {
     var schema = config.GetSchema(m.Area);
     Modules.Add(new ModuleDbVersionInfo(schema, m.Name, m.Version));
       }
 }
예제 #32
0
 public void Init(EntityApp app)
 {
     _log = app.GetService <ILogService>();
     app.AppEvents.Initializing += Events_Initializing;
     _timer          = new System.Timers.Timer(BaseTimerIntervalMs);
     _timer.Elapsed += Timer_Elapsed;
     _timer.Enabled  = true;
 }
예제 #33
0
 public NotificationListener(EntityApp app, Func<NotificationMessage, bool> filter = null, bool blockAll = false, int maxMessages = 100)
 {
     _blockAll = blockAll;
       _filter = filter;
       _maxMessages = maxMessages;
       _notificationService = app.GetService<INotificationService>();
       Util.Check(_notificationService != null, "Notification service is not registered.");
       _notificationService.Sending += NotificationService_Sending;
 }
예제 #34
0
 public void Init(EntityApp app)
 {
     _app          = app;
     _errorLog     = _app.GetService <IErrorLogService>();
     _operationLog = _app.GetService <IOperationLogService>();
     _timerService = _app.GetService <ITimerService>();
     _timerService.Elapsed1Second  += TimerService_Elapsed1Second;
     _app.AppEvents.FlushRequested += Events_FlushRequested;
 }
예제 #35
0
 public DbUpgradeManager(DataSource dataSource)
 {
     _dataSource = dataSource;
       _dataAccess = (DataAccessService) _dataSource.App.DataAccess;
       _database = _dataSource.Database;
       _app = _database.DbModel.EntityApp;
       _log = _app.ActivationLog;
       _timeService = _app.GetService<ITimeService>();
 }
예제 #36
0
 public LogFileWriter(EntityApp app, string logPath)
 {
     _app = app;
       LogPath = logPath;
       _logService = app.GetService<IOperationLogService>();
       Util.Check(_logService != null, "OperationLog service not registered, cannot attach LogFileWriter.");
       if (_logService != null)
     _logService.Saving += logService_Saving;
 }
예제 #37
0
 public void Init(EntityApp app)
 {
     _app = app;
     _authorityByRoleSet = new ObjectCache <string, Authority>(
         expirationSeconds:  RoleCacheExpirationSec, maxLifeSeconds: RoleCacheExpirationSec * 5);
     _authorityByUserId = new ObjectCache <string, AuthorityDescriptor>(
         expirationSeconds: UserCacheExpirationSec, maxLifeSeconds: UserCacheExpirationSec * 5);
     _authorityByUserId.Removed += AuthorityByUserId_Removed;
 }
예제 #38
0
 public void Init()
 {
     if (_app == null)
     {
         Startup.DropSchemaObjects("misc");
         _app = new MiscTestsEntityApp();
         Startup.ActivateApp(_app);
     }
 }
예제 #39
0
 public DbVersionInfo(EntityApp app, DbModelConfig config)
 {
     Version = app.Version;
     foreach (var m in app.Modules)
     {
         var schema = config.GetSchema(m.Area);
         Modules.Add(new ModuleDbVersionInfo(schema, m.Name, m.Version));
     }
 }
예제 #40
0
        private static void EnableAppTimers(EntityApp app, bool enable)
        {
            var timers = app.GetService <ITimerServiceControl>();

            if (timers != null)
            {
                timers.EnableAutoFire(enable);
            }
        }
예제 #41
0
 public DbUpgradeManager(DataSource dataSource)
 {
     _dataSource  = dataSource;
     _dataAccess  = (DataAccessService)_dataSource.App.DataAccess;
     _database    = _dataSource.Database;
     _app         = _database.DbModel.EntityApp;
     _log         = _app.SystemLog;
     _timeService = _app.GetService <ITimeService>();
 }
예제 #42
0
 public NotificationListener(EntityApp app, Func <NotificationMessage, bool> filter = null, bool blockAll = false, int maxMessages = 100)
 {
     _blockAll            = blockAll;
     _filter              = filter;
     _maxMessages         = maxMessages;
     _notificationService = app.GetService <INotificationService>();
     Util.Check(_notificationService != null, "Notification service is not registered.");
     _notificationService.Sending += NotificationService_Sending;
 }
예제 #43
0
        internal void OnServiceAdded(EntityApp app, Type serviceType, object serviceInstance)
        {
            var evt = ServiceAdded;

            if (evt != null)
            {
                evt(this, new ServiceEventArgs(app, serviceType, serviceInstance));
            }
        }
예제 #44
0
 public void Init(EntityApp app)
 {
     _app = app;
       _errorLog = _app.GetService<IErrorLogService>();
       _operationLog = _app.GetService<IOperationLogService>();
       _timerService = _app.GetService<ITimerService>();
       _timerService.Elapsed1Second += TimerService_Elapsed1Second;
       _app.AppEvents.FlushRequested += Events_FlushRequested;
 }
예제 #45
0
 public DataSource(string name, Database database, CacheSettings cacheSettings = null)
 {
     Database = database;
     App      = Database.DbModel.EntityApp;
     Name     = database.Settings.DataSourceName;
     if (cacheSettings != null && cacheSettings.HasTypes())
     {
         Cache = new EntityCache(App, cacheSettings, this.Database);
     }
 }
예제 #46
0
        public static void ConfigureSlimApiControllers(HttpConfiguration config, EntityApp app)
        {
            var actionSelector = new SlimApiActionSelector(app.ApiConfiguration);

            config.Services.Replace(typeof(System.Web.Http.Controllers.IHttpActionSelector), actionSelector);
            var prov = new SlimApiDirectRouteProvider();

            config.MapHttpAttributeRoutes(prov);
            // config.ParameterBindingRules.Add(typeof(DateTime), p => new DateTimeParameterBinding(p));
        }
예제 #47
0
 public void WriteCsSources(EntityApp app, DbFirstConfig config)
 {
     _app = app;
       _config = config;
       HasErrors = false;
       var fileStream = File.Create(_config.OutputPath);
       _output = new StreamWriter(fileStream);
       WriteSource();
       _output.Flush();
       _output.Close();
 }
예제 #48
0
 public void LinkTo(EntityApp mainApp)
 {
     MainApp = mainApp;
       MainApp.LinkedApps.Add(this);
       MainApp.ImportServices(this, typeof(IErrorLogService), typeof(IOperationLogService), typeof(IIncidentLogService),
                            typeof(ITransactionLogService), typeof(IWebCallLogService), typeof(INotificationLogService),
                            typeof(ILoginLogService), typeof(IDbUpgradeLogService), typeof(IUserSessionService),
                            typeof(IEventLogService)
                            );
       _transactionLogModule.TargetApp = MainApp;
       //Replace time service with the instance from the main app
       base.TimeService = MainApp.TimeService;
       this.ImportServices(MainApp, typeof(ITimeService));
 }
예제 #49
0
 public EntityCache(EntityApp app, CacheSettings settings, Database database)
 {
     _app = app;
       Settings = settings;
       _dataStore = database;
       _sparseCache = new SparseEntityCache(Settings);
       var dbIsCaseInsensitive = database.Settings.Driver.Features.IsSet(Data.Driver.DbFeatures.DefaultCaseInsensitive);
       var caseMode = dbIsCaseInsensitive ? StringCaseMode.CaseInsensitive : StringCaseMode.CaseSensitive;
       _fullSetCache = new FullSetEntityCache(_app, Settings, _dataStore, caseMode);
       _timeService = _app.GetService<ITimeService>();
       _logService = _app.GetService<IOperationLogService>();
       _errorLog = _app.GetService<IErrorLogService>();
       MarkCachedEntities();
       _app.AppEvents.SavedChanges += Events_SavedChanges;
 }
예제 #50
0
 public void ImportBooks(EntityApp app, int count = 250)
 {
     _app = app;
       _session = _app.OpenSystemSession();
       //Preload caches
       _bookCache = _session.GetEntities<IBook>(take: 1000).ToDictionary(b => b.Title, StringComparer.InvariantCultureIgnoreCase);
       _publishersCache = _session.GetEntities<IPublisher>(take: 200).ToDictionary(p => p.Name, StringComparer.InvariantCultureIgnoreCase);
       _authorsCache = _session.GetEntities<IAuthor>(take: 1000).ToDictionary(a => a.FirstName + a.LastName, StringComparer.InvariantCultureIgnoreCase);
       _client = new GoogleBooksApiClient();
       var batchSize = count / 5;
       ImportBooksInCategory(BookCategory.Programming, "c#", batchSize);
       ImportBooksInCategory(BookCategory.Programming, "Linux", batchSize);
       ImportBooksInCategory(BookCategory.Fiction, "Comics", batchSize);
       ImportBooksInCategory(BookCategory.Fiction, "Science fiction", batchSize);
       ImportBooksInCategory(BookCategory.Kids, "Fairy tales", batchSize);
 }
예제 #51
0
 public static EntityApp ActivateApp(EntityApp app, bool updateSchema = true, bool dropUnknownTables = false)
 {
     DeleteLocalLogFile();
       app.LogPath = LogFilePath;
       //If driver is not set, it means we are running from Test Explorer in VS. Use ServerTypeForTestExplorer
       if(Driver == null)
     SetupForTestExplorerMode();
       try {
     app.Init();
     var upgradeMode = updateSchema ? DbUpgradeMode.Always : DbUpgradeMode.Never;
     var upgradeOptions = DbUpgradeOptions.Default;
     if(dropUnknownTables)
       upgradeOptions |= DbUpgradeOptions.DropUnknownObjects;
     var dbSettings = new DbSettings(Driver, DbOptions, ConnectionString, upgradeMode: upgradeMode, upgradeOptions: upgradeOptions);
     app.ConnectTo(dbSettings);
     return app;
       } catch (StartupFailureException sx) {
     //Unit test framework shows only ex message, not details; let's write specifics into debug output - it will be shown in test failure report
     Debug.WriteLine("EntityApp init exception: ");
     Debug.WriteLine(sx.Log);
     throw;
       }
 }
예제 #52
0
 public EmailNotificationProvider(EntityApp app) {
   _app = app;
 }
예제 #53
0
 private void SetupUpdateLogging()
 {
     TargetApp = TargetApp ?? App;
       TargetApp.AppEvents.SavedChanges += Events_SavedChanges;
       TargetApp.AppEvents.ExecutedNonQuery += AppEvents_ExecutedNonQuery;
       // remove entities in ignore areas or with DoNotTrack attribute
       if(Settings.IgnoreAreas.Count > 0) {
     foreach(var ent in TargetApp.Model.Entities)
       if(Settings.IgnoreAreas.Contains(ent.Area))
     ent.Flags |= EntityFlags.DoNotTrack;
       }
 }
예제 #54
0
 public void TestIdentityInLargeBatch()
 {
     _app = new IdentityTestsEntityApp();
       SetupHelper.DropSchemaObjects("ident");
       SetupHelper.ActivateApp(_app);
       var saveParamCount = SetupHelper.Driver.MaxParamCount;
       SetupHelper.Driver.MaxParamCount = 20; //to cause update batch split into multiple commands
       var session = _app.OpenSession();
       // add 50 owners, then 200 cars with random owners
       // our goal is to create update set with inserts of linked entities with identity pk/fk
       // we test how identity values are carried between commands (from IPerson.Id to ICar.OwnerId)
       var owners = new List<IPerson>();
       var rand = new Random();
       for (int i = 0; i < 50; i++) {
     var owner = session.NewEntity<IPerson>();
     owner.Name = "Owner" + i;
     owners.Add(owner);
       }
       for (int i = 0; i < 100; i++) {
     var car = session.NewEntity<ICar>();
     car.Model = "Model" + i;
     car.Owner = owners[rand.Next(owners.Count)];
       }
       try {
     session.SaveChanges(); //we just test that it succeeds
       } finally {
     //revert max param count back to normal - to avoid disturbing other tests
     SetupHelper.Driver.MaxParamCount = saveParamCount;
       }
 }
예제 #55
0
 public WebCallInfo(EntityApp app, WebCallContextHandlerSettings settings, HttpRequestMessage request) {
   Request = request;
   WebContext = new WebCallContext(request, app.TimeService.UtcNow, app.TimeService.ElapsedMilliseconds, 
       GetIncomingCookies, GetIncomingHeaderValues);
   WebContext.OperationContext = new OperationContext(app, UserInfo.Anonymous, WebContext, settings.ConnectionReuseMode);
   Request.Properties[WebCallContext.WebCallContextKey] = WebContext;
   WebContext.RequestUrl = request.RequestUri.ToString();
   WebContext.HttpMethod = request.Method.ToString().ToUpperInvariant();
   WebContext.RequestSize = request.Content.GetLength();
   //Check if it is one of the sensitive URLs
   var path = request.RequestUri.LocalPath;
   // The only way to get IPaddress it seems is thru use of HttpContext (from ASP.NET host).
   // NOTE: it is available only under ASP.NET/IIS host, not in self-hosting scenario
   var ctxWrapper = WebHelper.GetHttpContextWrapper(request);
   if (ctxWrapper != null) {
     //IIS hosting
     WebContext.Referrer = ctxWrapper.Request.UrlReferrer + string.Empty;
     WebContext.IPAddress = ctxWrapper.Request.UserHostAddress;
   } else {
     //Self hosting
     // webCallContext.IPAddress = "(unknown)"; 
   }
   //Set log level for this call
   WebContext.OperationContext.LogLevel = settings.LogLevel;
 }
예제 #56
0
 public static void CreateUnitTestData(EntityApp app)
 {
     CreateBasicTestData(app);
       CreateSampleBooks(app);
 }
예제 #57
0
        public static void CreateSampleBooks(EntityApp app)
        {
            //Create identity for sample data generator; this results in SampleDataGenerator showing up in UserSession/UserTransaction tables
              // Books and coupons will reference these transactions as 'CreatedIn'
              var session = app.OpenSystemSession();
              var dataGenUser = session.NewUser("SampleDataGenerator", UserType.StoreAdmin);
              session.SaveChanges();
              var userInfo = new UserInfo(dataGenUser.Id, dataGenUser.UserName);
              var dataGenOpCtx = new OperationContext(app, userInfo);
              session = dataGenOpCtx.OpenSystemSession();
              session.EnableCache(false);

              //Publishers and authors
              var msPub = session.NewPublisher("MS Books"); //we are using extension method here
              var kidPub = session.NewPublisher("Kids Books");
              var johnBio = ConstructLongText(4000);
              var authorJohn = session.NewAuthor("John", "Sharp", johnBio);
              var authorJack = session.NewAuthor("Jack", "Pound");
              var authorJim = session.NewAuthor("Jim", "Hacker"); //this author is not user - we'll use this author to check some tricky query in tests
              var john = authorJohn.User = session.CreateUser("John", UserType.Author);

              var pubDate = DateTime.Today.AddYears(-1);
              //Books on programming from MS Books
              var csBook = session.NewBook(BookEdition.Paperback | BookEdition.EBook, BookCategory.Programming,
                 "c# Programming", "Expert programming in c#", msPub, pubDate, 20.0m);
              // Some multiline text in Abstract
              csBook.Abstract = @"Expert guide to programming in c# 4.0.
            Highly recommended for beginners and experts.
            Covers c# 4.0.";
              csBook.CoverImage = LoadImageFromResource(session, "csBookCover.jpg");
              csBook.Authors.Add(authorJohn); //this is many-to-many
              csBook.Authors.Add(authorJack);
              csBook.Editor = session.EntitySet<IUser>().First(u => u.UserName == "Linda");
              var vbBook = session.NewBook(BookEdition.Paperback | BookEdition.Hardcover, BookCategory.Programming,
                          "VB Programming", "Expert programming in VB", msPub, pubDate, 25.0m);
              vbBook.Authors.Add(authorJack);
              vbBook.CoverImage = LoadImageFromResource(session, "vbBookCover.jpg");

              //Folk tale, no authors
              var kidBook = session.NewBook(BookEdition.Hardcover, BookCategory.Kids,
               "Three little pigs", "Folk tale", kidPub, pubDate, 10.0m);
              var winBook = session.NewBook(BookEdition.Hardcover, BookCategory.Programming,
               "Windows Programming", "Introduction to Windows Programming", msPub, pubDate.AddYears(-10), 30.0m);
              winBook.Authors.Add(authorJohn);
              winBook.CoverImage = LoadImageFromResource(session, "winBookCover.jpg");
              var comicBook = session.NewBook(BookEdition.Paperback, BookCategory.Fiction, "IronMan", null, kidPub, null, 3);
              //Coupons
              var coupon1 = session.NewCoupon("C1", 10, DateTime.Now.AddMonths(1));
              var coupon2 = session.NewCoupon("C2", 10, DateTime.Now.AddMonths(1));
              var coupon3 = session.NewCoupon("C3", 10, DateTime.Now.AddMonths(1));

              try {
            session.SaveChanges();  //Save books, coupons, users and logins
              } catch(ClientFaultException ex) {
            var msgs = ex.GetMessages();
            Debug.WriteLine(msgs);
            throw;
              }

              //Orders
              var dora = session.EntitySet<IUser>().First(u => u.UserName == "Dora");
              var doraOrder = session.NewOrder(dora);
              doraOrder.Add(csBook, 1);
              doraOrder.Add(kidBook, 2);
              doraOrder.CompleteOrder("C1");
              //Create one empty order, for testing includes in queries
              var doraOrder2 = session.NewOrder(dora);
              doraOrder2.Status = OrderStatus.Canceled;

              var diego = session.EntitySet<IUser>().First(u => u.UserName == "Diego");
              var diegoOrder = session.NewOrder(diego);
              diegoOrder.Add(vbBook, 1);
              diegoOrder.Add(csBook, 1);
              diegoOrder.CompleteOrder();
              //Reviews
              var doraReview = session.NewReview(dora, csBook, 5, "Very interesting book!", "Liked it very much!");
              var diegoReview = session.NewReview(diego, vbBook, 1, "Not worth it.", "Did not like it at all.");
              // special reviews with text including wildcards for LIKE operator - will use them to test wildcard escaping in LIKE
              var duffy = session.EntitySet<IUser>().First(u => u.UserName == "Duffy");
              session.NewReview(duffy, comicBook, 1, "'Boo", "'Boo");
              session.NewReview(duffy, comicBook, 1, "_Boo", "_Boo");
              session.NewReview(duffy, comicBook, 1, "%Boo", "%Boo");
              session.NewReview(duffy, comicBook, 1, "[Boo]", "[Boo]");
              session.NewReview(duffy, comicBook, 1, "]Boo[", "]Boo[");
              session.NewReview(duffy, comicBook, 1, @"\Boo\oo", @"\Boo\oo");
              session.NewReview(duffy, comicBook, 1, @"/Boo/oo", @"/Boo/oo");

              //Save orders
              try {
            session.SaveChanges();
              } catch (ClientFaultException ex) {
            var msgs = ex.GetMessages();
            Debug.WriteLine(msgs);
            throw;
              }
        }
예제 #58
0
        private Dictionary<Type, EntityInfo> _entitiesByType = new Dictionary<Type, EntityInfo>(); //interfaceType -> EntityInfo

        #endregion Fields

        #region Constructors

        public EntityModel(EntityApp app)
        {
            App = app;
              ModelState = EntityModelState.Created;
        }
예제 #59
0
 public AppInitEventArgs(EntityApp app, MemoryLog log, EntityAppInitStep step)
 {
     App = app;
       Log = log;
       Step = step;
 }
예제 #60
0
 public EntityAppEvents(EntityApp app)
 {
     _app = app;
 }