Enhancement to support audit fields on entities
This commit is contained in:
parent
32a2d164c3
commit
c9783c3b2f
|
@ -57,6 +57,6 @@
|
|||
htmltext.Content = content;
|
||||
await htmltextservice.AddHtmlTextAsync(htmltext);
|
||||
}
|
||||
UriHelper.NavigateTo(NavigateUrl(), true);
|
||||
UriHelper.NavigateTo(NavigateUrl(true));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,14 +109,46 @@
|
|||
}
|
||||
if (site != null || reload == true)
|
||||
{
|
||||
// get Url path and querystring
|
||||
string path = new Uri(_absoluteUri).PathAndQuery.Substring(1);
|
||||
if (path.EndsWith("/")) { path = path.Substring(0, path.Length - 1); }
|
||||
|
||||
// parse querystring and remove
|
||||
Dictionary<string, string> querystring = new Dictionary<string, string>();
|
||||
if (path.IndexOf("?") != -1)
|
||||
{
|
||||
querystring = ParseQueryString(path);
|
||||
path = path.Substring(0, path.IndexOf("?"));
|
||||
}
|
||||
|
||||
// format path and remove alias
|
||||
path = path.Replace("//", "/");
|
||||
if (!path.EndsWith("/")) { path += "/"; }
|
||||
if (alias.Path != "")
|
||||
{
|
||||
path = path.Replace(alias.Path, "");
|
||||
if (path.StartsWith("/")) { path = path.Substring(1); }
|
||||
path = path.Replace(alias.Path + "/", "");
|
||||
}
|
||||
Dictionary<string, string> querystring = ParseQueryString(path);
|
||||
|
||||
// extract admin route elements from path
|
||||
string[] segments = path.Split('/');
|
||||
int result;
|
||||
if (segments.Length >= 3 && int.TryParse(segments[segments.Length - 3], out result))
|
||||
{
|
||||
// path has moduleid and control specification ie. page/moduleid/control/
|
||||
control = segments[segments.Length - 2];
|
||||
moduleid = result;
|
||||
path = path.Replace(moduleid.ToString() + "/" + control + "/", "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (segments.Length >= 2 && int.TryParse(segments[segments.Length - 2], out result))
|
||||
{
|
||||
// path has only moduleid specification ie. page/moduleid/
|
||||
moduleid = result;
|
||||
path = path.Replace(moduleid.ToString() + "/", "");
|
||||
}
|
||||
}
|
||||
// remove trailing slash so it can be used as a key for Pages
|
||||
if (path.EndsWith("/")) path = path.Substring(0, path.Length - 1);
|
||||
|
||||
if (querystring.ContainsKey("reload"))
|
||||
{
|
||||
|
@ -146,31 +178,6 @@
|
|||
pages = PageState.Pages;
|
||||
}
|
||||
|
||||
// format path so that it can be located in the pages collection
|
||||
if (path.IndexOf("?") != -1)
|
||||
{
|
||||
// remove querystring from path
|
||||
path = path.Substring(0, path.IndexOf("?"));
|
||||
}
|
||||
// remove admin route elements from path
|
||||
string[] segments = path.Split('/');
|
||||
int result;
|
||||
// admin routes are in the form of path/moduleid/control or path/moduleid
|
||||
if (segments.Length >= 2 && int.TryParse(segments[segments.Length - 2], out result))
|
||||
{
|
||||
control = segments[segments.Length - 1];
|
||||
moduleid = result;
|
||||
path = path.Replace("/" + moduleid.ToString() + "/" + control, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (segments.Length >= 1 && int.TryParse(segments[segments.Length - 1], out result))
|
||||
{
|
||||
moduleid = result;
|
||||
path = path.Replace("/" + moduleid.ToString(), "");
|
||||
}
|
||||
}
|
||||
|
||||
if (PageState == null || reload == true)
|
||||
{
|
||||
page = pages.Where(item => item.Path == path).FirstOrDefault();
|
||||
|
|
|
@ -2,14 +2,15 @@
|
|||
using Oqtane.Shared.Modules.HtmlText.Models;
|
||||
using Oqtane.Repository;
|
||||
using Oqtane.Modules;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Oqtane.Server.Modules.HtmlText.Repository
|
||||
{
|
||||
public class HtmlTextContext : ContextBase, IService
|
||||
public class HtmlTextContext : DBContextBase, IService
|
||||
{
|
||||
public virtual DbSet<HtmlTextInfo> HtmlText { get; set; }
|
||||
|
||||
public HtmlTextContext(ITenantResolver TenantResolver):base(TenantResolver)
|
||||
public HtmlTextContext(ITenantResolver TenantResolver, IHttpContextAccessor accessor) : base(TenantResolver, accessor)
|
||||
{
|
||||
// ContextBase handles multi-tenant database connections
|
||||
}
|
||||
|
|
|
@ -9,10 +9,10 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class AliasRepository : IAliasRepository
|
||||
{
|
||||
private MasterContext db;
|
||||
private MasterDBContext db;
|
||||
private readonly IMemoryCache _cache;
|
||||
|
||||
public AliasRepository(MasterContext context, IMemoryCache cache)
|
||||
public AliasRepository(MasterDBContext context, IMemoryCache cache)
|
||||
{
|
||||
db = context;
|
||||
_cache = cache;
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
using Microsoft.EntityFrameworkCore;
|
||||
using Oqtane.Models;
|
||||
using System;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class ContextBase : DbContext
|
||||
{
|
||||
private Tenant tenant;
|
||||
|
||||
public ContextBase(ITenantResolver TenantResolver)
|
||||
{
|
||||
tenant = TenantResolver.GetTenant();
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(tenant.DBConnectionString
|
||||
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
|
||||
);
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
if (tenant.DBSchema != "")
|
||||
{
|
||||
modelBuilder.HasDefaultSchema(tenant.DBSchema);
|
||||
}
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
}
|
||||
}
|
74
Oqtane.Server/Repository/DBContextBase.cs
Normal file
74
Oqtane.Server/Repository/DBContextBase.cs
Normal file
|
@ -0,0 +1,74 @@
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Oqtane.Models;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class DBContextBase : IdentityDbContext<IdentityUser>
|
||||
{
|
||||
private Tenant tenant;
|
||||
private IHttpContextAccessor accessor;
|
||||
|
||||
public DBContextBase(ITenantResolver TenantResolver, IHttpContextAccessor accessor)
|
||||
{
|
||||
tenant = TenantResolver.GetTenant();
|
||||
this.accessor = accessor;
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(tenant.DBConnectionString
|
||||
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
|
||||
);
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
if (tenant.DBSchema != "")
|
||||
{
|
||||
modelBuilder.HasDefaultSchema(tenant.DBSchema);
|
||||
}
|
||||
}
|
||||
|
||||
public override int SaveChanges()
|
||||
{
|
||||
ChangeTracker.DetectChanges();
|
||||
|
||||
string username = accessor.HttpContext.User.Identity.Name;
|
||||
DateTime date = DateTime.Now;
|
||||
|
||||
var created = ChangeTracker.Entries()
|
||||
.Where(x => x.State == EntityState.Added);
|
||||
|
||||
foreach(var item in created)
|
||||
{
|
||||
if (item.Entity is IAuditable entity)
|
||||
{
|
||||
item.CurrentValues[nameof(IAuditable.CreatedBy)] = username;
|
||||
item.CurrentValues[nameof(IAuditable.CreatedOn)] = date;
|
||||
}
|
||||
}
|
||||
|
||||
var modified = ChangeTracker.Entries()
|
||||
.Where(x => x.State == EntityState.Modified || x.State == EntityState.Added);
|
||||
|
||||
foreach (var item in modified)
|
||||
{
|
||||
if (item.Entity is IAuditable entity)
|
||||
{
|
||||
item.CurrentValues[nameof(IAuditable.ModifiedBy)] = username;
|
||||
item.CurrentValues[nameof(IAuditable.ModifiedOn)] = date;
|
||||
}
|
||||
}
|
||||
|
||||
return base.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,9 +3,9 @@ using Oqtane.Models;
|
|||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class MasterContext : DbContext
|
||||
public class MasterDBContext : DbContext
|
||||
{
|
||||
public MasterContext(DbContextOptions<MasterContext> options) : base(options) { }
|
||||
public MasterDBContext(DbContextOptions<MasterDBContext> options) : base(options) { }
|
||||
|
||||
public virtual DbSet<Alias> Alias { get; set; }
|
||||
public virtual DbSet<Tenant> Tenant { get; set; }
|
|
@ -7,9 +7,9 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class ModuleRepository : IModuleRepository
|
||||
{
|
||||
private TenantContext db;
|
||||
private TenantDBContext db;
|
||||
|
||||
public ModuleRepository(TenantContext context)
|
||||
public ModuleRepository(TenantDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class PageModuleRepository : IPageModuleRepository
|
||||
{
|
||||
private TenantContext db;
|
||||
private TenantDBContext db;
|
||||
|
||||
public PageModuleRepository(TenantContext context)
|
||||
public PageModuleRepository(TenantDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class PageRepository : IPageRepository
|
||||
{
|
||||
private TenantContext db;
|
||||
private TenantDBContext db;
|
||||
|
||||
public PageRepository(TenantContext context)
|
||||
public PageRepository(TenantDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class SiteRepository : ISiteRepository
|
||||
{
|
||||
private TenantContext db;
|
||||
private TenantDBContext db;
|
||||
|
||||
public SiteRepository(TenantContext context)
|
||||
public SiteRepository(TenantDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Oqtane.Models;
|
||||
using System;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class TenantContext : IdentityDbContext<IdentityUser>
|
||||
{
|
||||
public virtual DbSet<Site> Site { get; set; }
|
||||
public virtual DbSet<Page> Page { get; set; }
|
||||
public virtual DbSet<PageModule> PageModule { get; set; }
|
||||
public virtual DbSet<Module> Module { get; set; }
|
||||
public virtual DbSet<User> User { get; set; }
|
||||
|
||||
private readonly Tenant tenant;
|
||||
|
||||
public TenantContext(ITenantResolver TenantResolver)
|
||||
{
|
||||
tenant = TenantResolver.GetTenant();
|
||||
}
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
optionsBuilder.UseSqlServer(tenant.DBConnectionString
|
||||
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
|
||||
);
|
||||
base.OnConfiguring(optionsBuilder);
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
if (tenant.DBSchema != "")
|
||||
{
|
||||
modelBuilder.HasDefaultSchema(tenant.DBSchema);
|
||||
}
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
}
|
||||
}
|
21
Oqtane.Server/Repository/TenantDBContext.cs
Normal file
21
Oqtane.Server/Repository/TenantDBContext.cs
Normal file
|
@ -0,0 +1,21 @@
|
|||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Oqtane.Models;
|
||||
|
||||
namespace Oqtane.Repository
|
||||
{
|
||||
public class TenantDBContext : DBContextBase
|
||||
{
|
||||
public virtual DbSet<Site> Site { get; set; }
|
||||
public virtual DbSet<Page> Page { get; set; }
|
||||
public virtual DbSet<PageModule> PageModule { get; set; }
|
||||
public virtual DbSet<Module> Module { get; set; }
|
||||
public virtual DbSet<User> User { get; set; }
|
||||
|
||||
public TenantDBContext(ITenantResolver TenantResolver, IHttpContextAccessor accessor) : base(TenantResolver, accessor)
|
||||
{
|
||||
// ContextBase handles multi-tenant database connections
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -10,10 +10,10 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class TenantRepository : ITenantRepository
|
||||
{
|
||||
private MasterContext db;
|
||||
private MasterDBContext db;
|
||||
private readonly IMemoryCache _cache;
|
||||
|
||||
public TenantRepository(MasterContext context, IMemoryCache cache)
|
||||
public TenantRepository(MasterDBContext context, IMemoryCache cache)
|
||||
{
|
||||
db = context;
|
||||
_cache = cache;
|
||||
|
|
|
@ -7,12 +7,12 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class TenantResolver : ITenantResolver
|
||||
{
|
||||
private MasterContext db;
|
||||
private MasterDBContext db;
|
||||
private readonly string aliasname;
|
||||
private readonly IAliasRepository _aliasrepository;
|
||||
private readonly ITenantRepository _tenantrepository;
|
||||
|
||||
public TenantResolver(MasterContext context, IHttpContextAccessor accessor, IAliasRepository aliasrepository, ITenantRepository tenantrepository)
|
||||
public TenantResolver(MasterDBContext context, IHttpContextAccessor accessor, IAliasRepository aliasrepository, ITenantRepository tenantrepository)
|
||||
{
|
||||
db = context;
|
||||
_aliasrepository = aliasrepository;
|
||||
|
|
|
@ -7,9 +7,9 @@ namespace Oqtane.Repository
|
|||
{
|
||||
public class UserRepository : IUserRepository
|
||||
{
|
||||
private TenantContext db;
|
||||
private TenantDBContext db;
|
||||
|
||||
public UserRepository(TenantContext context)
|
||||
public UserRepository(TenantDBContext context)
|
||||
{
|
||||
db = context;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,10 @@ CREATE TABLE [dbo].[Site](
|
|||
[SiteId] [int] IDENTITY(1,1) NOT NULL,
|
||||
[Name] [nvarchar](200) NOT NULL,
|
||||
[Logo] [nvarchar](50) NOT NULL,
|
||||
[CreatedBy] [nvarchar](256) NOT NULL,
|
||||
[CreatedOn] [datetime] NOT NULL,
|
||||
[ModifiedBy] [nvarchar](256) NOT NULL,
|
||||
[ModifiedOn] [datetime] NOT NULL,
|
||||
CONSTRAINT [PK_Site] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[SiteId] ASC
|
||||
|
@ -68,6 +72,10 @@ CREATE TABLE [dbo].[HtmlText](
|
|||
[HtmlTextId] [int] IDENTITY(1,1) NOT NULL,
|
||||
[ModuleId] [int] NOT NULL,
|
||||
[Content] [nvarchar](max) NOT NULL,
|
||||
[CreatedBy] [nvarchar](256) NOT NULL,
|
||||
[CreatedOn] [datetime] NOT NULL,
|
||||
[ModifiedBy] [nvarchar](256) NOT NULL,
|
||||
[ModifiedOn] [datetime] NOT NULL,
|
||||
CONSTRAINT [PK_HtmlText] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[HtmlTextId] ASC
|
||||
|
@ -77,7 +85,7 @@ GO
|
|||
|
||||
CREATE TABLE [dbo].[User](
|
||||
[UserId] [int] IDENTITY(1,1) NOT NULL,
|
||||
[Username] [nvarchar](50) NOT NULL,
|
||||
[Username] [nvarchar](256) NOT NULL,
|
||||
[DisplayName] [nvarchar](50) NOT NULL,
|
||||
[Roles] [nvarchar](50) NOT NULL,
|
||||
[IsSuperUser] [bit] NOT NULL,
|
||||
|
@ -125,11 +133,11 @@ Create seed data
|
|||
|
||||
SET IDENTITY_INSERT [dbo].[Site] ON
|
||||
GO
|
||||
INSERT [dbo].[Site] ([SiteId], [Name], [Logo])
|
||||
VALUES (1, N'Site1', N'oqtane.png')
|
||||
INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (1, N'Site1', N'oqtane.png', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[Site] ([SiteId], [Name], [Logo])
|
||||
VALUES (2, N'Site2', N'oqtane.png')
|
||||
INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (2, N'Site2', N'oqtane.png', '', getdate(), '', getdate())
|
||||
GO
|
||||
SET IDENTITY_INSERT [dbo].[Site] OFF
|
||||
GO
|
||||
|
@ -292,23 +300,23 @@ GO
|
|||
|
||||
SET IDENTITY_INSERT [dbo].[HtmlText] ON
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (1, 3, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <br /><br /><a href="http://localhost:44357/site2/">Go To Site2</a>')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (1, 3, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. <br /><br /><a href="http://localhost:44357/site2/">Go To Site2</a>', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (2, 5, N'Enim sed faucibus turpis in eu mi bibendum neque egestas. Quis hendrerit dolor magna eget est lorem. Dui faucibus in ornare quam viverra orci sagittis. Integer eget aliquet nibh praesent tristique magna sit. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Tortor id aliquet lectus proin. Diam volutpat commodo sed egestas egestas fringilla. Posuere sollicitudin aliquam ultrices sagittis orci. Viverra mauris in aliquam sem fringilla ut morbi tincidunt. Eget gravida cum sociis natoque penatibus et. Sagittis orci a scelerisque purus semper. Eget velit aliquet sagittis id consectetur purus. Volutpat blandit aliquam etiam erat. Et tortor consequat id porta nibh venenatis cras. Volutpat odio facilisis mauris sit amet. Varius duis at consectetur lorem.')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (2, 5, N'Enim sed faucibus turpis in eu mi bibendum neque egestas. Quis hendrerit dolor magna eget est lorem. Dui faucibus in ornare quam viverra orci sagittis. Integer eget aliquet nibh praesent tristique magna sit. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Tortor id aliquet lectus proin. Diam volutpat commodo sed egestas egestas fringilla. Posuere sollicitudin aliquam ultrices sagittis orci. Viverra mauris in aliquam sem fringilla ut morbi tincidunt. Eget gravida cum sociis natoque penatibus et. Sagittis orci a scelerisque purus semper. Eget velit aliquet sagittis id consectetur purus. Volutpat blandit aliquam etiam erat. Et tortor consequat id porta nibh venenatis cras. Volutpat odio facilisis mauris sit amet. Varius duis at consectetur lorem.', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (3, 6, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (3, 6, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (4, 7, N'Ornare arcu dui vivamus arcu felis bibendum ut. Tortor vitae purus faucibus ornare. Lectus sit amet est placerat in egestas erat imperdiet sed. Aliquam sem et tortor consequat id. Fermentum iaculis eu non diam phasellus vestibulum. Ultricies integer quis auctor elit sed. Fermentum odio eu feugiat pretium nibh ipsum. Ut consequat semper viverra nam libero. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. At risus viverra adipiscing at in tellus. Facilisi nullam vehicula ipsum a arcu cursus vitae congue. At varius vel pharetra vel turpis nunc eget lorem dolor. Morbi non arcu risus quis varius. Turpis massa sed elementum tempus egestas.')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (4, 7, N'Ornare arcu dui vivamus arcu felis bibendum ut. Tortor vitae purus faucibus ornare. Lectus sit amet est placerat in egestas erat imperdiet sed. Aliquam sem et tortor consequat id. Fermentum iaculis eu non diam phasellus vestibulum. Ultricies integer quis auctor elit sed. Fermentum odio eu feugiat pretium nibh ipsum. Ut consequat semper viverra nam libero. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. At risus viverra adipiscing at in tellus. Facilisi nullam vehicula ipsum a arcu cursus vitae congue. At varius vel pharetra vel turpis nunc eget lorem dolor. Morbi non arcu risus quis varius. Turpis massa sed elementum tempus egestas.', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (5, 16, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at. <br /><br /><a href="http://localhost:44357/">Go To Site1</a>')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (5, 16, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at. <br /><br /><a href="http://localhost:44357/">Go To Site1</a>', '', getdate(), '', getdate())
|
||||
GO
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
|
||||
VALUES (6, 17, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.')
|
||||
INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
|
||||
VALUES (6, 17, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', '', getdate(), '', getdate())
|
||||
GO
|
||||
SET IDENTITY_INSERT [dbo].[HtmlText] OFF
|
||||
GO
|
||||
|
|
|
@ -101,14 +101,14 @@ namespace Oqtane.Server
|
|||
|
||||
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||
|
||||
services.AddDbContext<MasterContext>(options =>
|
||||
services.AddDbContext<MasterDBContext>(options =>
|
||||
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
|
||||
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
|
||||
));
|
||||
services.AddDbContext<TenantContext>(options => { });
|
||||
services.AddDbContext<TenantDBContext>(options => { });
|
||||
|
||||
services.AddIdentity<IdentityUser, IdentityRole>()
|
||||
.AddEntityFrameworkStores<TenantContext>()
|
||||
.AddEntityFrameworkStores<TenantDBContext>()
|
||||
.AddDefaultTokenProviders();
|
||||
|
||||
services.Configure<IdentityOptions>(options =>
|
||||
|
@ -235,14 +235,14 @@ namespace Oqtane.Server
|
|||
{
|
||||
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
|
||||
|
||||
services.AddDbContext<MasterContext>(options =>
|
||||
services.AddDbContext<MasterDBContext>(options =>
|
||||
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
|
||||
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
|
||||
));
|
||||
services.AddDbContext<TenantContext>(options => { });
|
||||
services.AddDbContext<TenantDBContext>(options => { });
|
||||
|
||||
services.AddIdentity<IdentityUser, IdentityRole>()
|
||||
.AddEntityFrameworkStores<TenantContext>()
|
||||
.AddEntityFrameworkStores<TenantDBContext>()
|
||||
.AddDefaultTokenProviders();
|
||||
|
||||
services.Configure<IdentityOptions>(options =>
|
||||
|
|
|
@ -1,14 +1,21 @@
|
|||
using System;
|
||||
using Oqtane.Models;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Oqtane.Shared.Modules.HtmlText.Models
|
||||
{
|
||||
[Table("HtmlText")]
|
||||
public class HtmlTextInfo
|
||||
public class HtmlTextInfo : IAuditable
|
||||
{
|
||||
[Key]
|
||||
public int HtmlTextId { get; set; }
|
||||
public int ModuleId { get; set; }
|
||||
public string Content { get; set; }
|
||||
|
||||
public string CreatedBy { get; set; }
|
||||
public DateTime CreatedOn { get; set; }
|
||||
public string ModifiedBy { get; set; }
|
||||
public DateTime ModifiedOn { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
12
Oqtane.Shared/Models/IAuditable.cs
Normal file
12
Oqtane.Shared/Models/IAuditable.cs
Normal file
|
@ -0,0 +1,12 @@
|
|||
using System;
|
||||
|
||||
namespace Oqtane.Models
|
||||
{
|
||||
public interface IAuditable
|
||||
{
|
||||
string CreatedBy { get; set; }
|
||||
DateTime CreatedOn { get; set; }
|
||||
string ModifiedBy { get; set; }
|
||||
DateTime ModifiedOn { get; set; }
|
||||
}
|
||||
}
|
|
@ -1,9 +1,16 @@
|
|||
namespace Oqtane.Models
|
||||
using System;
|
||||
|
||||
namespace Oqtane.Models
|
||||
{
|
||||
public class Site
|
||||
public class Site : IAuditable
|
||||
{
|
||||
public int SiteId { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Logo { get; set; }
|
||||
|
||||
public string CreatedBy { get; set; }
|
||||
public DateTime CreatedOn { get; set; }
|
||||
public string ModifiedBy { get; set; }
|
||||
public DateTime ModifiedOn { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user