diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.Designer.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.Designer.cs
new file mode 100644
index 0000000..7ae7535
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.Designer.cs
@@ -0,0 +1,71 @@
+//
+using System;
+using COA.EnterpriseServices.DataAccess.EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ [DbContext(typeof(QuickBaseContext))]
+ [Migration("20201014142201_add-client")]
+ partial class addclient
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.9")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Creditor", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClientFirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClientLastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("Status")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Creditors");
+ });
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.SettlementAttempt", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("SettlementAttempts");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.cs
new file mode 100644
index 0000000..fba1bc5
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142201_add-client.cs
@@ -0,0 +1,17 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ public partial class addclient : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.Designer.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.Designer.cs
new file mode 100644
index 0000000..0d20104
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.Designer.cs
@@ -0,0 +1,113 @@
+//
+using System;
+using COA.EnterpriseServices.DataAccess.EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ [DbContext(typeof(QuickBaseContext))]
+ [Migration("20201014142507_add-client-dbset")]
+ partial class addclientdbset
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.9")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Address")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("Phone")
+ .HasColumnType("bigint");
+
+ b.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Zip")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Clients");
+ });
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Creditor", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("ClientFirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ClientLastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("Status")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Creditors");
+ });
+
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.SettlementAttempt", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("SettlementAttempts");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.cs
new file mode 100644
index 0000000..e98622a
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/20201014142507_add-client-dbset.cs
@@ -0,0 +1,39 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
+{
+ public partial class addclientdbset : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Clients",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Created = table.Column(nullable: false),
+ Modified = table.Column(nullable: false),
+ FirstName = table.Column(nullable: true),
+ LastName = table.Column(nullable: true),
+ Email = table.Column(nullable: true),
+ Phone = table.Column(nullable: false),
+ Address = table.Column(nullable: true),
+ City = table.Column(nullable: true),
+ State = table.Column(nullable: true),
+ Zip = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Clients", x => x.Id);
+ });
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Clients");
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
index 38903c1..df583ee 100644
--- a/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/Migrations/QuickBaseContextModelSnapshot.cs
@@ -19,6 +19,48 @@ namespace COA.EnterpriseServices.DataAccess.EntityFramework.Migrations
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+ modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Client", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ b.Property("Address")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("City")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Created")
+ .HasColumnType("datetime2");
+
+ b.Property("Email")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("FirstName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Modified")
+ .HasColumnType("datetime2");
+
+ b.Property("Phone")
+ .HasColumnType("bigint");
+
+ b.Property("State")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Zip")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Clients");
+ });
+
modelBuilder.Entity("COA.EnterpriseServices.DataAccess.Entities.Creditor", b =>
{
b.Property("Id")
diff --git a/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs b/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
index bc30f72..0bf15ca 100644
--- a/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
+++ b/COA.EnterpriseServices.DataAccess.EntityFramework/QuickBaseContext.cs
@@ -14,5 +14,6 @@ namespace COA.EnterpriseServices.DataAccess.EntityFramework
public DbSet Creditors { get; set; }
public DbSet SettlementAttempts { get; set; }
+ public DbSet Clients { get; set; }
}
}
diff --git a/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs b/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
index 2938ab3..10552e6 100644
--- a/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
+++ b/COA.EnterpriseServices.DataAccess.QuickBase/FieldMapRegistry.cs
@@ -13,12 +13,22 @@ namespace COA.EnterpriseServices.DataAccess.QuickBase
static FieldMapRegistry()
{
+ // Map to QB field IDs. Obviously we will use actual IDs
+
AddFieldMap(c => c.Id, 1);
AddFieldMap(c => c.Created, 2);
AddFieldMap(c => c.Modified, 3);
AddFieldMap(c => c.Status, 10);
AddFieldMap(c => c.ClientFirstName, 20);
AddFieldMap(c => c.ClientLastName, 21);
+
+ AddFieldMap(c => c.Id, 1);
+ AddFieldMap(c => c.Created, 2);
+ AddFieldMap(c => c.Modified, 3);
+ AddFieldMap(c => c.Email, 10);
+ AddFieldMap(c => c.Phone, 11);
+ AddFieldMap(c => c.FirstName, 20);
+ AddFieldMap(c => c.LastName, 21);
}
internal static void AddFieldMap(Expression> property, int fieldId)
diff --git a/COA.EnterpriseServices.DataAccess/DataAccessManager.cs b/COA.EnterpriseServices.DataAccess/DataAccessManager.cs
index e86b2d6..ad650c6 100644
--- a/COA.EnterpriseServices.DataAccess/DataAccessManager.cs
+++ b/COA.EnterpriseServices.DataAccess/DataAccessManager.cs
@@ -7,12 +7,41 @@ namespace COA.EnterpriseServices.DataAccess
{
public static class DataAccessManager
{
- private static readonly IDictionary activeDataAccess = new Dictionary
+ {
+ #region Creditor
+
+ ["COA.EnterpriseServices.DataAccess.Entities.Creditor"] = new[]
+ {
+ "COA.EnterpriseServices.DataAccess.QuickBase.QuickBaseDataAccess",
+ "COA.EnterpriseServices.DataAccess.EntityFramework.EntityDataAccess"
+ },
+
+ #endregion
+
+ #region Client
+
+ ["COA.EnterpriseServices.DataAccess.Entities.Client"] = new[]
+ {
+ "COA.EnterpriseServices.DataAccess.QuickBase.QuickBaseDataAccess",
+ "COA.EnterpriseServices.DataAccess.EntityFramework.EntityDataAccess"
+ }
+
+ #endregion
+ };
public static ICollection> GetDataAccess() where T : class, IRecord
{
+ var type = typeof(T);
+
return Dependencies.Container
.GetAllInstances>()
+ .Where(i =>
+ {
+ var dataAccessType = i.GetType().FullName;
+
+ return activeDataAccess.ContainsKey(type.FullName) && activeDataAccess[type.FullName].Any(a => dataAccessType.StartsWith(a));
+ })
.OrderBy(i => i.GetType().Name.StartsWith("QuickBase", StringComparison.OrdinalIgnoreCase))
.ToList();
}
diff --git a/COA.EnterpriseServices.DataAccess/Entities/Client.cs b/COA.EnterpriseServices.DataAccess/Entities/Client.cs
new file mode 100644
index 0000000..e8b3a62
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess/Entities/Client.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace COA.EnterpriseServices.DataAccess.Entities
+{
+ public class Client : IRecord
+ {
+ public int Id { get; set; }
+ public DateTime Created { get; set; }
+ public DateTime Modified { get; set; }
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public string Email { get; set; }
+ public long Phone { get; set; }
+ public string Address { get; set; }
+ public string City { get; set; }
+ public string State { get; set; }
+ public string Zip { get; set; }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess/Helpers/BaseHelper.cs b/COA.EnterpriseServices.DataAccess/Helpers/BaseHelper.cs
index a6daa31..ace6721 100644
--- a/COA.EnterpriseServices.DataAccess/Helpers/BaseHelper.cs
+++ b/COA.EnterpriseServices.DataAccess/Helpers/BaseHelper.cs
@@ -25,5 +25,15 @@ namespace COA.EnterpriseServices.DataAccess.Helpers
// if the "EF" version invokes first, return that value
return results.FirstOrDefault(r => r != null && !r.Equals(default(TResult)));
}
+
+ public virtual T Get(int id)
+ {
+ return Invoke(d => d.Get(id));
+ }
+
+ public virtual bool Add(T item)
+ {
+ return Invoke(d => d.Add(item));
+ }
}
}
diff --git a/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs b/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs
new file mode 100644
index 0000000..1440f65
--- /dev/null
+++ b/COA.EnterpriseServices.DataAccess/Helpers/ClientHelper.cs
@@ -0,0 +1,13 @@
+using COA.EnterpriseServices.DataAccess.Entities;
+using System.Collections.Generic;
+
+namespace COA.EnterpriseServices.DataAccess.Helpers
+{
+ public class ClientHelper : BaseHelper
+ {
+ public ICollection FindByEmail(string email)
+ {
+ return Invoke(d => d.Get(c => c.Email.Equals(email)));
+ }
+ }
+}
diff --git a/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs b/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
index 1357728..b632e78 100644
--- a/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
+++ b/COA.EnterpriseServices.DataAccess/Helpers/CreditorHelper.cs
@@ -6,12 +6,7 @@ namespace COA.EnterpriseServices.DataAccess.Helpers
{
public class CreditorHelper : BaseHelper
{
- public Creditor GetCreditor(int id)
- {
- return Invoke(d => d.Get(id));
- }
-
- public ICollection FindCreditorsByName(string name)
+ public ICollection FindByName(string name)
{
return Invoke(d => d.Get(c => c.ClientFirstName.Contains(name) || c.ClientLastName.Contains(name)));
}
@@ -20,10 +15,5 @@ namespace COA.EnterpriseServices.DataAccess.Helpers
{
return Invoke(d => d.Get(c => c.Status == status));
}
-
- public bool AddCreditor(Creditor creditor)
- {
- return Invoke(d => d.Add(creditor));
- }
}
}
diff --git a/COA.EnterpriseServices.Sandbox/Program.cs b/COA.EnterpriseServices.Sandbox/Program.cs
index 38b62a9..1a697c3 100644
--- a/COA.EnterpriseServices.Sandbox/Program.cs
+++ b/COA.EnterpriseServices.Sandbox/Program.cs
@@ -6,14 +6,20 @@ namespace COA.EnterpriseServices.Sandbox
internal class Program
{
private static void Main(string[] args)
+ {
+ ClientStuff();
+ //CreditorStuff();
+ }
+
+ private static void CreditorStuff()
{
var creditorHelper = new CreditorHelper();
// get single creditor
- var singleCreditor = creditorHelper.GetCreditor(1);
+ var singleCreditor = creditorHelper.Get(1);
// search creditors
- var searchedCreditors = creditorHelper.FindCreditorsByName("Guy");
+ var searchedCreditors = creditorHelper.FindByName("Guy");
// search active creditors
var activeCreditors = creditorHelper.FindByStatus("Active");
@@ -25,9 +31,22 @@ namespace COA.EnterpriseServices.Sandbox
Status = "Active"
};
- creditorHelper.AddCreditor(newCreditor);
+ creditorHelper.Add(newCreditor);
}
+ private static void ClientStuff()
+ {
+ var clientHelper = new ClientHelper();
+ var newClient = new Client
+ {
+ FirstName = "Ryan",
+ LastName = "Peters",
+ Email = "ryan@binarydad.com",
+ Phone = 4102183673
+ };
+
+ clientHelper.Add(newClient);
+ }
}
}