Working in migration to linq2SQL
This commit is contained in:
36
UserService.DatabaseLayer/DataModels/Class1.cs
Normal file
36
UserService.DatabaseLayer/DataModels/Class1.cs
Normal file
@ -0,0 +1,36 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LinqToDB.Configuration;
|
||||
|
||||
namespace DataModels
|
||||
{
|
||||
public class ConnectionStringSettings : IConnectionStringSettings
|
||||
{
|
||||
public string ConnectionString { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ProviderName { get; set; }
|
||||
public bool IsGlobal => false;
|
||||
}
|
||||
|
||||
public class MySettings : ILinqToDBSettings
|
||||
{
|
||||
public IEnumerable<IDataProviderSettings> DataProviders => Enumerable.Empty<IDataProviderSettings>();
|
||||
|
||||
public string DefaultConfiguration => "MySqlServer";
|
||||
public string DefaultDataProvider => "MySqlServer";
|
||||
|
||||
public IEnumerable<IConnectionStringSettings> ConnectionStrings
|
||||
{
|
||||
get
|
||||
{
|
||||
yield return
|
||||
new ConnectionStringSettings
|
||||
{
|
||||
Name = "Northwind",
|
||||
ProviderName = "MySqlServer",
|
||||
ConnectionString = @"Server=srvbo;Database=UserService;Uid=UserDbAdmin;Pwd=12345678;"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Collections.Generic;
|
||||
using UserService.Infrastructure.DataModels;
|
||||
|
||||
namespace UserService.DatabaseLayer.DataModels
|
||||
{
|
||||
public static class ModelBuilderExtensions
|
||||
{
|
||||
public static void Seed(this ModelBuilder modelBuilder)
|
||||
{
|
||||
if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));
|
||||
var groups = new OrganizationUnit { CommonName = "Groups", Id = Guid.NewGuid() };
|
||||
var users = new OrganizationUnit { CommonName = "Users", Id = Guid.NewGuid() };
|
||||
var germany = new OrganizationUnit { CommonName = "Germany", Id = Guid.NewGuid(), ParentId = users.Id };
|
||||
var usa = new OrganizationUnit { CommonName = "USA", Id = Guid.NewGuid(), ParentId = users.Id };
|
||||
var arizona = new OrganizationUnit { CommonName = "Arizona", Id = Guid.NewGuid(), ParentId = usa.Id };
|
||||
var france = new OrganizationUnit { CommonName = "France", Id = Guid.NewGuid(), ParentId = users.Id };
|
||||
modelBuilder.Entity<OrganizationUnit>().HasData(users, groups, germany, usa, arizona, france);
|
||||
var user = new User { CommonName = Environment.UserName, IsActive = true, Id = Guid.NewGuid(), ParentId = users.Id };
|
||||
modelBuilder.Entity<User>().HasData(user);
|
||||
var secGroup = new SecurityGroup { CommonName = "Global Admin", Id = Guid.NewGuid(), ParentId = groups.Id };
|
||||
modelBuilder.Entity<SecurityGroup>().HasData(secGroup);
|
||||
|
||||
modelBuilder.Entity<MembersMember>()
|
||||
.HasData(new MembersMember { MemberId = secGroup.Id, AttachedMemberId = user.Id });
|
||||
}
|
||||
|
||||
public static void CreateRelations(this ModelBuilder modelBuilder)
|
||||
{
|
||||
if (modelBuilder == null) throw new ArgumentNullException(nameof(modelBuilder));
|
||||
modelBuilder.Entity<MembersMember>()
|
||||
.HasKey(bc => new { bc.MemberId, bc.AttachedMemberId });
|
||||
modelBuilder.Entity<MembersMember>()
|
||||
.HasOne(bc => bc.AttachedMember)
|
||||
.WithMany(b => b!.MemberOf)
|
||||
.HasForeignKey(bc => bc.AttachedMemberId);
|
||||
modelBuilder.Entity<MembersMember>()
|
||||
.HasOne(bc => bc.Member)
|
||||
.WithMany(c => c!.Members)
|
||||
.HasForeignKey(bc => bc.MemberId);
|
||||
modelBuilder.Entity<Node>()
|
||||
.HasMany(c => c.Children)
|
||||
.WithOne(e => e.Parent!)
|
||||
.HasForeignKey(bc => bc.ParentId);
|
||||
}
|
||||
}
|
||||
|
||||
public static class UserExtensions
|
||||
{
|
||||
public static IEnumerable<SecurityGroup> GetSecurityGroups(this User user)
|
||||
{
|
||||
if (user == null) throw new ArgumentNullException(nameof(user));
|
||||
foreach (var userMember in user.MemberOf)
|
||||
{
|
||||
if (userMember.Member is SecurityGroup securityGroup)
|
||||
{
|
||||
yield return securityGroup;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class SecurityGroupExtensions
|
||||
{
|
||||
public static IEnumerable<Member> GetAttachedMembers(this SecurityGroup securityGroup)
|
||||
{
|
||||
if (securityGroup == null) throw new ArgumentNullException(nameof(securityGroup));
|
||||
foreach (var userMember in securityGroup.Members)
|
||||
{
|
||||
if (userMember.AttachedMember is null) continue;
|
||||
yield return userMember.AttachedMember;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@
|
||||
//---------------------------------------------------------------------------------------------------
|
||||
|
||||
#pragma warning disable 1591
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -17,11 +18,11 @@ using LinqToDB.Mapping;
|
||||
namespace DataModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Database : UserDatabase
|
||||
/// Database : UserService
|
||||
/// Data Source : srvbo
|
||||
/// Server Version : 5.5.5-10.3.22-MariaDB-1ubuntu1
|
||||
/// </summary>
|
||||
public partial class UserDatabaseDB : LinqToDB.Data.DataConnection
|
||||
public partial class UserServiceDB : LinqToDB.Data.DataConnection
|
||||
{
|
||||
public ITable<Member> Members { get { return this.GetTable<Member>(); } }
|
||||
public ITable<MembersMember> MembersMembers { get { return this.GetTable<MembersMember>(); } }
|
||||
@ -30,13 +31,13 @@ namespace DataModels
|
||||
public ITable<SecurityGroup> SecurityGroups { get { return this.GetTable<SecurityGroup>(); } }
|
||||
public ITable<User> Users { get { return this.GetTable<User>(); } }
|
||||
|
||||
public UserDatabaseDB()
|
||||
public UserServiceDB()
|
||||
{
|
||||
InitDataContext();
|
||||
InitMappingSchema();
|
||||
}
|
||||
|
||||
public UserDatabaseDB(string configuration)
|
||||
public UserServiceDB(string configuration)
|
||||
: base(configuration)
|
||||
{
|
||||
InitDataContext();
|
||||
@ -58,31 +59,31 @@ namespace DataModels
|
||||
/// MembersMember_ibfk_2_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="AttachedMemberId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<MembersMember> MembersMemberIbfk2BackReferences { get; set; }
|
||||
public IEnumerable<MembersMember> MembersMemberIbfk2BackReferences { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// MembersMember_ibfk_1_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="MemberId", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<MembersMember> MembersMemberibfks { get; set; }
|
||||
public IEnumerable<MembersMember> MembersMemberibfks { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Members_ibfk_1
|
||||
/// Members_ibfk_2
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Members_ibfk_1", BackReferenceName="Membersibfks")]
|
||||
public Node Node { get; set; }
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Members_ibfk_2", BackReferenceName="Membersibfks")]
|
||||
public Node Node { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// SecurityGroups_ibfk_1_BackReference
|
||||
/// SecurityGroups_ibfk_2_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<SecurityGroup> SecurityGroupsibfks { get; set; }
|
||||
public IEnumerable<SecurityGroup> SecurityGroupsibfks { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Users_ibfk_1_BackReference
|
||||
/// Users_ibfk_2_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<User> Usersibfks { get; set; }
|
||||
public IEnumerable<User> Usersibfks { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -99,13 +100,13 @@ namespace DataModels
|
||||
/// MembersMember_ibfk_2
|
||||
/// </summary>
|
||||
[Association(ThisKey="AttachedMemberId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="MembersMember_ibfk_2", BackReferenceName="MembersMemberIbfk2BackReferences")]
|
||||
public Member AttachedMember { get; set; }
|
||||
public Member AttachedMember { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// MembersMember_ibfk_1
|
||||
/// </summary>
|
||||
[Association(ThisKey="MemberId", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="MembersMember_ibfk_1", BackReferenceName="MembersMemberibfks")]
|
||||
public Member Member { get; set; }
|
||||
public Member Member { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -113,21 +114,22 @@ namespace DataModels
|
||||
[Table("Nodes")]
|
||||
public partial class Node
|
||||
{
|
||||
[PrimaryKey, Identity] public int Id { get; set; } // int(11)
|
||||
[PrimaryKey, Identity] public int Id { get; set; } // int(11)
|
||||
[Column, NotNull ] public string CommonName { get; set; } = null!; // text
|
||||
|
||||
#region Associations
|
||||
|
||||
/// <summary>
|
||||
/// Members_ibfk_1_BackReference
|
||||
/// Members_ibfk_2_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<Member> Membersibfks { get; set; }
|
||||
public IEnumerable<Member> Membersibfks { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// OrganizationUnits_ibfk_1_BackReference
|
||||
/// OrganizationUnits_ibfk_2_BackReference
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=true, Relationship=Relationship.OneToMany, IsBackReference=true)]
|
||||
public IEnumerable<OrganizationUnit> OrganizationUnitsibfks { get; set; }
|
||||
public IEnumerable<OrganizationUnit> OrganizationUnitsibfks { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -142,10 +144,10 @@ namespace DataModels
|
||||
#region Associations
|
||||
|
||||
/// <summary>
|
||||
/// OrganizationUnits_ibfk_1
|
||||
/// OrganizationUnits_ibfk_2
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="OrganizationUnits_ibfk_1", BackReferenceName="OrganizationUnitsibfks")]
|
||||
public Node Node { get; set; }
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="OrganizationUnits_ibfk_2", BackReferenceName="OrganizationUnitsibfks")]
|
||||
public Node Node { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -158,10 +160,10 @@ namespace DataModels
|
||||
#region Associations
|
||||
|
||||
/// <summary>
|
||||
/// SecurityGroups_ibfk_1
|
||||
/// SecurityGroups_ibfk_2
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="SecurityGroups_ibfk_1", BackReferenceName="SecurityGroupsibfks")]
|
||||
public Member Member { get; set; }
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="SecurityGroups_ibfk_2", BackReferenceName="SecurityGroupsibfks")]
|
||||
public Member Member { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
@ -169,18 +171,18 @@ namespace DataModels
|
||||
[Table("Users")]
|
||||
public partial class User
|
||||
{
|
||||
[Column, NotNull ] public int Id { get; set; } // int(11)
|
||||
[Column, Nullable] public string FirstName { get; set; } // text
|
||||
[Column, Nullable] public string LastName { get; set; } // text
|
||||
[Column, NotNull ] public bool IsActive { get; set; } // bit(1)
|
||||
[Column, NotNull ] public int Id { get; set; } // int(11)
|
||||
[Column, Nullable] public string? FirstName { get; set; } // text
|
||||
[Column, Nullable] public string? LastName { get; set; } // text
|
||||
[Column, NotNull ] public bool IsActive { get; set; } // bit(1)
|
||||
|
||||
#region Associations
|
||||
|
||||
/// <summary>
|
||||
/// Users_ibfk_1
|
||||
/// Users_ibfk_2
|
||||
/// </summary>
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Users_ibfk_1", BackReferenceName="Usersibfks")]
|
||||
public Member Member { get; set; }
|
||||
[Association(ThisKey="Id", OtherKey="Id", CanBeNull=false, Relationship=Relationship.ManyToOne, KeyName="Users_ibfk_2", BackReferenceName="Usersibfks")]
|
||||
public Member Member { get; set; } = null!;
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
@ -5,50 +5,15 @@
|
||||
<# //@ include file="$(ProjectDir)LinqToDB.Templates\LinqToDB.MySql.Tools.ttinclude" #>
|
||||
<# //@ include file="$(ProjectDir)LinqToDB.Templates\PluralizationService.ttinclude" #>
|
||||
<#
|
||||
/*
|
||||
1. Create new *.tt file (e.g. MyDatabase.tt) in a folder where you would like to generate your data model
|
||||
and copy content from this file to it. For example:
|
||||
|
||||
MyProject
|
||||
DataModels
|
||||
MyDatabase.tt
|
||||
|
||||
2. Modify the connection settings below to connect to your database.
|
||||
|
||||
3. Add connection string to the web/app.config file:
|
||||
|
||||
<connectionStrings>
|
||||
<add name="MyDatabase" connectionString="Server=MyServer;Port=3306;Database=MyDatabase;Uid=root;Pwd=TestPassword;charset=utf8;" providerName="MySql.Data.MySqlClient" />
|
||||
</connectionStrings>
|
||||
|
||||
4. To access your database use the following code:
|
||||
|
||||
using (var db = new MyDatabaseDB())
|
||||
{
|
||||
var q =
|
||||
from c in db.Customers
|
||||
select c;
|
||||
|
||||
foreach (var c in q)
|
||||
Console.WriteLine(c.ContactName);
|
||||
}
|
||||
|
||||
5. See more at https://linq2db.github.io/articles/T4.html
|
||||
|
||||
IMPORTANT: if running .tt file gives you error like this:
|
||||
"error : Failed to resolve include text for file: C:\...\$(LinqToDBT4<SOME_DB>TemplatesDirectory)LinqToDB.<DB_NAME>.Tools.ttinclude"
|
||||
check tt file properties.
|
||||
Custom tool must be set to TextTemplatingFileGenerator, not TextTemplatingFilePreprocessor or any other value.
|
||||
*/
|
||||
|
||||
|
||||
NamespaceName = "DataModels";
|
||||
|
||||
// to configure GetSchemaOptions properties, add them here, before load metadata call
|
||||
|
||||
LoadMySqlMetadata("srvbo", "UserDatabase", "UserDbAdmin", "12345678");
|
||||
// LoadMySqlMetadata(string connectionString);
|
||||
LoadMySqlMetadata("srvbo", "UserService", "UserDbAdmin", "12345678");
|
||||
// LoadMySqlMetadata(string connectionString);
|
||||
|
||||
// to adjust loaded database model before generation, add your code here, after load metadata, but before GenerateModel() call
|
||||
|
||||
EnableNullableReferenceTypes = true;
|
||||
GenerateModel();
|
||||
#>
|
||||
|
@ -1,23 +0,0 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using UserService.Infrastructure.DataModels;
|
||||
|
||||
namespace UserService.DatabaseLayer.DataModels
|
||||
{
|
||||
public class UserServiceDbContext : DbContext
|
||||
{
|
||||
public DbSet<User> Users { get; set; } = null!;
|
||||
public DbSet<SecurityGroup> SecurityGroups { get; set; } = null!;
|
||||
public DbSet<MembersMember> UserMembers { get; set; } = null!;
|
||||
public DbSet<OrganizationUnit> OrganizationUnits { get; set; } = null!;
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder options)
|
||||
=> options.UseSqlite(@"Data Source=C:\Users\holger\Desktop\UserService\UserService.db");
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.CreateRelations();
|
||||
modelBuilder.Seed();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user