Stable
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
using DynamORM.Tests.Helpers;
|
using DynamORM.Tests.Helpers;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
|
||||||
@@ -64,13 +65,13 @@ namespace DynamORM.Tests.Modify
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestInsertByArguments()
|
public void TestInsertByArguments()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(1, GetTestTable().Insert(code: 201, first: "Juri", last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
Assert.AreEqual(1, GetTestTable().Insert(code: 201, first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
var o = GetTestTable().Single(code: 201);
|
var o = GetTestTable().Single(code: 201);
|
||||||
Assert.Less(200, o.id);
|
Assert.Less(200, o.id);
|
||||||
Assert.AreEqual("201", o.code);
|
Assert.AreEqual("201", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -81,13 +82,13 @@ namespace DynamORM.Tests.Modify
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestInsertByDynamicObjects()
|
public void TestInsertByDynamicObjects()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(1, GetTestTable().Insert(values: new { code = 202, first = "Juri", last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
Assert.AreEqual(1, GetTestTable().Insert(values: new { code = 202, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
var o = GetTestTable().Single(code: 202);
|
var o = GetTestTable().Single(code: 202);
|
||||||
Assert.Less(200, o.id);
|
Assert.Less(200, o.id);
|
||||||
Assert.AreEqual("202", o.code);
|
Assert.AreEqual("202", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -104,7 +105,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
Id = u.Max(columns: "id") + 1,
|
Id = u.Max(columns: "id") + 1,
|
||||||
Code = "203",
|
Code = "203",
|
||||||
First = "Juri",
|
First = null,
|
||||||
Last = "Gagarin",
|
Last = "Gagarin",
|
||||||
Email = "juri.gagarin@megacorp.com",
|
Email = "juri.gagarin@megacorp.com",
|
||||||
Quote = "bla, bla, bla"
|
Quote = "bla, bla, bla"
|
||||||
@@ -114,7 +115,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 203);
|
var o = u.Single(code: 203);
|
||||||
Assert.Less(200, o.id);
|
Assert.Less(200, o.id);
|
||||||
Assert.AreEqual("203", o.code);
|
Assert.AreEqual("203", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -131,7 +132,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
id = u.Max(columns: "id") + 1,
|
id = u.Max(columns: "id") + 1,
|
||||||
code = "204",
|
code = "204",
|
||||||
first = "Juri",
|
first = null,
|
||||||
last = "Gagarin",
|
last = "Gagarin",
|
||||||
email = "juri.gagarin@megacorp.com",
|
email = "juri.gagarin@megacorp.com",
|
||||||
quote = "bla, bla, bla"
|
quote = "bla, bla, bla"
|
||||||
@@ -141,7 +142,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 204);
|
var o = u.Single(code: 204);
|
||||||
Assert.Less(200, o.id);
|
Assert.Less(200, o.id);
|
||||||
Assert.AreEqual("204", o.code);
|
Assert.AreEqual("204", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -156,13 +157,13 @@ namespace DynamORM.Tests.Modify
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestUpdateByArguments()
|
public void TestUpdateByArguments()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(1, GetTestTable().Update(id: 1, code: 201, first: "Juri", last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
Assert.AreEqual(1, GetTestTable().Update(id: 1, code: 201, first: null, last: "Gagarin", email: "juri.gagarin@megacorp.com", quote: "bla, bla, bla"));
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
var o = GetTestTable().Single(code: 201);
|
var o = GetTestTable().Single(code: 201);
|
||||||
Assert.AreEqual(1, o.id);
|
Assert.AreEqual(1, o.id);
|
||||||
Assert.AreEqual("201", o.code);
|
Assert.AreEqual("201", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -173,13 +174,13 @@ namespace DynamORM.Tests.Modify
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestUpdateByDynamicObject()
|
public void TestUpdateByDynamicObject()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(1, GetTestTable().Update(update: new { id = 2, code = 202, first = "Juri", last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
Assert.AreEqual(1, GetTestTable().Update(update: new { id = 2, code = 202, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }));
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
var o = GetTestTable().Single(code: 202);
|
var o = GetTestTable().Single(code: 202);
|
||||||
Assert.AreEqual(2, o.id);
|
Assert.AreEqual(2, o.id);
|
||||||
Assert.AreEqual("202", o.code);
|
Assert.AreEqual("202", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -196,7 +197,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
Id = 3,
|
Id = 3,
|
||||||
Code = "203",
|
Code = "203",
|
||||||
First = "Juri",
|
First = null,
|
||||||
Last = "Gagarin",
|
Last = "Gagarin",
|
||||||
Email = "juri.gagarin@megacorp.com",
|
Email = "juri.gagarin@megacorp.com",
|
||||||
Quote = "bla, bla, bla"
|
Quote = "bla, bla, bla"
|
||||||
@@ -206,7 +207,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 203);
|
var o = u.Single(code: 203);
|
||||||
Assert.AreEqual(3, o.id);
|
Assert.AreEqual(3, o.id);
|
||||||
Assert.AreEqual("203", o.code);
|
Assert.AreEqual("203", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -223,7 +224,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
id = 4,
|
id = 4,
|
||||||
code = "204",
|
code = "204",
|
||||||
first = "Juri",
|
first = null,
|
||||||
last = "Gagarin",
|
last = "Gagarin",
|
||||||
email = "juri.gagarin@megacorp.com",
|
email = "juri.gagarin@megacorp.com",
|
||||||
quote = "bla, bla, bla"
|
quote = "bla, bla, bla"
|
||||||
@@ -233,7 +234,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 204);
|
var o = u.Single(code: 204);
|
||||||
Assert.AreEqual(4, o.id);
|
Assert.AreEqual(4, o.id);
|
||||||
Assert.AreEqual("204", o.code);
|
Assert.AreEqual("204", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -244,13 +245,13 @@ namespace DynamORM.Tests.Modify
|
|||||||
[Test]
|
[Test]
|
||||||
public void TestUpdateByDynamicObjects()
|
public void TestUpdateByDynamicObjects()
|
||||||
{
|
{
|
||||||
Assert.AreEqual(1, GetTestTable().Update(values: new { code = 205, first = "Juri", last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }, where: new { id = 5 }));
|
Assert.AreEqual(1, GetTestTable().Update(values: new { code = 205, first = DBNull.Value, last = "Gagarin", email = "juri.gagarin@megacorp.com", quote = "bla, bla, bla" }, where: new { id = 5 }));
|
||||||
|
|
||||||
// Verify
|
// Verify
|
||||||
var o = GetTestTable().Single(code: 205);
|
var o = GetTestTable().Single(code: 205);
|
||||||
Assert.AreEqual(5, o.id);
|
Assert.AreEqual(5, o.id);
|
||||||
Assert.AreEqual("205", o.code);
|
Assert.AreEqual("205", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -267,7 +268,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
Id = 6,
|
Id = 6,
|
||||||
Code = "206",
|
Code = "206",
|
||||||
First = "Juri",
|
First = null,
|
||||||
Last = "Gagarin",
|
Last = "Gagarin",
|
||||||
Email = "juri.gagarin@megacorp.com",
|
Email = "juri.gagarin@megacorp.com",
|
||||||
Quote = "bla, bla, bla"
|
Quote = "bla, bla, bla"
|
||||||
@@ -277,7 +278,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 206);
|
var o = u.Single(code: 206);
|
||||||
Assert.AreEqual(6, o.id);
|
Assert.AreEqual(6, o.id);
|
||||||
Assert.AreEqual("206", o.code);
|
Assert.AreEqual("206", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
@@ -294,7 +295,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
{
|
{
|
||||||
id = 7,
|
id = 7,
|
||||||
code = "207",
|
code = "207",
|
||||||
first = "Juri",
|
first = null,
|
||||||
last = "Gagarin",
|
last = "Gagarin",
|
||||||
email = "juri.gagarin@megacorp.com",
|
email = "juri.gagarin@megacorp.com",
|
||||||
quote = "bla, bla, bla"
|
quote = "bla, bla, bla"
|
||||||
@@ -304,7 +305,7 @@ namespace DynamORM.Tests.Modify
|
|||||||
var o = u.Single(code: 207);
|
var o = u.Single(code: 207);
|
||||||
Assert.AreEqual(7, o.id);
|
Assert.AreEqual(7, o.id);
|
||||||
Assert.AreEqual("207", o.code);
|
Assert.AreEqual("207", o.code);
|
||||||
Assert.AreEqual("Juri", o.first);
|
Assert.AreEqual(null, o.first);
|
||||||
Assert.AreEqual("Gagarin", o.last);
|
Assert.AreEqual("Gagarin", o.last);
|
||||||
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
Assert.AreEqual("juri.gagarin@megacorp.com", o.email);
|
||||||
Assert.AreEqual("bla, bla, bla", o.quote);
|
Assert.AreEqual("bla, bla, bla", o.quote);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace DynamORM.Builders
|
|||||||
/// <summary>Insert query builder.</summary>
|
/// <summary>Insert query builder.</summary>
|
||||||
public class DynamicInsertQueryBuilder : DynamicQueryBuilder<DynamicInsertQueryBuilder>
|
public class DynamicInsertQueryBuilder : DynamicQueryBuilder<DynamicInsertQueryBuilder>
|
||||||
{
|
{
|
||||||
/// <summary>Gets list of columns that will be seected.</summary>
|
/// <summary>Gets list of columns that will be selected.</summary>
|
||||||
public IDictionary<string, DynamicColumn> ValueColumns { get; private set; }
|
public IDictionary<string, DynamicColumn> ValueColumns { get; private set; }
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicInsertQueryBuilder"/> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicInsertQueryBuilder"/> class.</summary>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace DynamORM.Builders
|
|||||||
/// <summary>Select query builder.</summary>
|
/// <summary>Select query builder.</summary>
|
||||||
public class DynamicSelectQueryBuilder : DynamicQueryBuilder<DynamicSelectQueryBuilder>
|
public class DynamicSelectQueryBuilder : DynamicQueryBuilder<DynamicSelectQueryBuilder>
|
||||||
{
|
{
|
||||||
/// <summary>Gets dictionary of columns that will be seected.</summary>
|
/// <summary>Gets dictionary of columns that will be selected.</summary>
|
||||||
public List<DynamicColumn> Columns { get; private set; }
|
public List<DynamicColumn> Columns { get; private set; }
|
||||||
|
|
||||||
/// <summary>Gets dictionary of columns that will be used to group query.</summary>
|
/// <summary>Gets dictionary of columns that will be used to group query.</summary>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace DynamORM.Builders
|
|||||||
/// <summary>Update query builder.</summary>
|
/// <summary>Update query builder.</summary>
|
||||||
public class DynamicUpdateQueryBuilder : DynamicQueryBuilder<DynamicUpdateQueryBuilder>
|
public class DynamicUpdateQueryBuilder : DynamicQueryBuilder<DynamicUpdateQueryBuilder>
|
||||||
{
|
{
|
||||||
/// <summary>Gets list of columns that will be seected.</summary>
|
/// <summary>Gets list of columns that will be selected.</summary>
|
||||||
public IDictionary<string, DynamicColumn> ValueColumns { get; private set; }
|
public IDictionary<string, DynamicColumn> ValueColumns { get; private set; }
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicUpdateQueryBuilder" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicUpdateQueryBuilder" /> class.</summary>
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ namespace DynamORM
|
|||||||
/// <summary>Less or equal operator.</summary>
|
/// <summary>Less or equal operator.</summary>
|
||||||
Lte,
|
Lte,
|
||||||
|
|
||||||
/// <summary>Greather than operator.</summary>
|
/// <summary>Greater than operator.</summary>
|
||||||
Gt,
|
Gt,
|
||||||
|
|
||||||
/// <summary>Greather or equal operator.</summary>
|
/// <summary>Greater or equal operator.</summary>
|
||||||
Gte,
|
Gte,
|
||||||
|
|
||||||
/// <summary>Between two values.</summary>
|
/// <summary>Between two values.</summary>
|
||||||
@@ -89,7 +89,7 @@ namespace DynamORM
|
|||||||
public DynamicColumn() { }
|
public DynamicColumn() { }
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicColumn" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicColumn" /> class.</summary>
|
||||||
/// <remarks>Constructor provided for easier object creation in qeries.</remarks>
|
/// <remarks>Constructor provided for easier object creation in queries.</remarks>
|
||||||
/// <param name="columnName">Name of column to set.</param>
|
/// <param name="columnName">Name of column to set.</param>
|
||||||
public DynamicColumn(string columnName)
|
public DynamicColumn(string columnName)
|
||||||
: this()
|
: this()
|
||||||
@@ -98,7 +98,7 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicColumn" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicColumn" /> class.</summary>
|
||||||
/// <remarks>Constructor provided for easier object creation in qeries.</remarks>
|
/// <remarks>Constructor provided for easier object creation in queries.</remarks>
|
||||||
/// <param name="columnName">Name of column to set.</param>
|
/// <param name="columnName">Name of column to set.</param>
|
||||||
/// <param name="oper">Compare column to value(s) operator.</param>
|
/// <param name="oper">Compare column to value(s) operator.</param>
|
||||||
/// <param name="value">Parameter value(s).</param>
|
/// <param name="value">Parameter value(s).</param>
|
||||||
@@ -136,18 +136,18 @@ namespace DynamORM
|
|||||||
/// <summary>Gets or sets a value indicating whether this condition will be treated as or condition.</summary>
|
/// <summary>Gets or sets a value indicating whether this condition will be treated as or condition.</summary>
|
||||||
public bool Or { get; set; }
|
public bool Or { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets a value indicating whether start new block in where steatement.</summary>
|
/// <summary>Gets or sets a value indicating whether start new block in where statement.</summary>
|
||||||
public bool BeginBlock { get; set; }
|
public bool BeginBlock { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets a value indicating whether end existing block in where steatement.</summary>
|
/// <summary>Gets or sets a value indicating whether end existing block in where statement.</summary>
|
||||||
public bool EndBlock { get; set; }
|
public bool EndBlock { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets a value indicating whether set parameters for null values.</summary>
|
/// <summary>Gets or sets a value indicating whether set parameters for null values.</summary>
|
||||||
public bool VirtualColumn { get; set; }
|
public bool VirtualColumn { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets schema representation of a column.</summary>
|
/// <summary>Gets or sets schema representation of a column.</summary>
|
||||||
/// <remarks>Woraround to providers issues which sometimes pass wrong
|
/// <remarks>Workaround to providers issues which sometimes pass wrong
|
||||||
/// data o schema. For example decimal has precission of 255 in sql
|
/// data o schema. For example decimal has precision of 255 in SQL
|
||||||
/// server.</remarks>
|
/// server.</remarks>
|
||||||
public DynamicSchemaColumn? Schema { get; set; }
|
public DynamicSchemaColumn? Schema { get; set; }
|
||||||
|
|
||||||
@@ -366,7 +366,7 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Sets the virtual column.</summary>
|
/// <summary>Sets the virtual column.</summary>
|
||||||
/// <param name="virt">If set to <c>true</c> [virt].</param>
|
/// <param name="virt">Set virtual column value.</param>
|
||||||
/// <returns>Returns self.</returns>
|
/// <returns>Returns self.</returns>
|
||||||
public DynamicColumn SetVirtualColumn(bool virt)
|
public DynamicColumn SetVirtualColumn(bool virt)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicCommand"/> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicCommand"/> class.</summary>
|
||||||
/// <param name="con">The connection.</param>
|
/// <param name="con">The connection.</param>
|
||||||
/// <param name="db">The databas manager.</param>
|
/// <param name="db">The database manager.</param>
|
||||||
internal DynamicCommand(DynamicConnection con, DynamicDatabase db)
|
internal DynamicCommand(DynamicConnection con, DynamicDatabase db)
|
||||||
{
|
{
|
||||||
_con = con;
|
_con = con;
|
||||||
@@ -61,8 +61,8 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicCommand"/> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicCommand"/> class.</summary>
|
||||||
/// <param name="db">The databas manager.</param>
|
/// <param name="db">The database manager.</param>
|
||||||
/// <remarks>Used intenaly to create command without context.</remarks>
|
/// <remarks>Used internally to create command without context.</remarks>
|
||||||
internal DynamicCommand(DynamicDatabase db)
|
internal DynamicCommand(DynamicDatabase db)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
|
|||||||
@@ -32,14 +32,14 @@ using System.Data;
|
|||||||
namespace DynamORM
|
namespace DynamORM
|
||||||
{
|
{
|
||||||
/// <summary>Connection wrapper.</summary>
|
/// <summary>Connection wrapper.</summary>
|
||||||
/// <remarks>This class is only connection holder conection is managed by
|
/// <remarks>This class is only connection holder, connection is managed by
|
||||||
/// <see cref="DynamicDatabase"/> instance.</remarks>
|
/// <see cref="DynamicDatabase"/> instance.</remarks>
|
||||||
public class DynamicConnection : IDbConnection, IDisposable
|
public class DynamicConnection : IDbConnection, IDisposable
|
||||||
{
|
{
|
||||||
private DynamicDatabase _db;
|
private DynamicDatabase _db;
|
||||||
private bool _singleTransaction;
|
private bool _singleTransaction;
|
||||||
|
|
||||||
/// <summary>Gets underlaying connection.</summary>
|
/// <summary>Gets underlying connection.</summary>
|
||||||
internal IDbConnection Connection { get; private set; }
|
internal IDbConnection Connection { get; private set; }
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicConnection" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicConnection" /> class.</summary>
|
||||||
@@ -89,7 +89,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Changes the current database for an open Connection object.</summary>
|
/// <summary>Changes the current database for an open Connection object.</summary>
|
||||||
/// <param name="databaseName">The name of the database to use in place of the current database.</param>
|
/// <param name="databaseName">The name of the database to use in place of the current database.</param>
|
||||||
/// <remarks>This operation is not supported in DynamORM. and will throw <see cref="NotSupportedException"/>.</remarks>
|
/// <remarks>This operation is not supported in <c>DynamORM</c>. and will throw <see cref="NotSupportedException"/>.</remarks>
|
||||||
/// <exception cref="NotSupportedException">Thrown always.</exception>
|
/// <exception cref="NotSupportedException">Thrown always.</exception>
|
||||||
public void ChangeDatabase(string databaseName)
|
public void ChangeDatabase(string databaseName)
|
||||||
{
|
{
|
||||||
@@ -107,12 +107,12 @@ namespace DynamORM
|
|||||||
/// <remarks>Does nothing. <see cref="DynamicDatabase"/> handles
|
/// <remarks>Does nothing. <see cref="DynamicDatabase"/> handles
|
||||||
/// closing connections. Only way to close it is to dispose connection.
|
/// closing connections. Only way to close it is to dispose connection.
|
||||||
/// It will close if this is multi connection configuration, otherwise
|
/// It will close if this is multi connection configuration, otherwise
|
||||||
/// it will stay open untill <see cref="DynamicDatabase"/> is not
|
/// it will stay open until <see cref="DynamicDatabase"/> is not
|
||||||
/// disposed.</remarks>
|
/// disposed.</remarks>
|
||||||
public void Close() { }
|
public void Close() { }
|
||||||
|
|
||||||
/// <summary>Gets or sets the string used to open a database.</summary>
|
/// <summary>Gets or sets the string used to open a database.</summary>
|
||||||
/// <remarks>Changing connection string operation is not supported in DynamORM.
|
/// <remarks>Changing connection string operation is not supported in <c>DynamORM</c>.
|
||||||
/// and will throw <see cref="NotSupportedException"/>.</remarks>
|
/// and will throw <see cref="NotSupportedException"/>.</remarks>
|
||||||
/// <exception cref="NotSupportedException">Thrown always when set is attempted.</exception>
|
/// <exception cref="NotSupportedException">Thrown always when set is attempted.</exception>
|
||||||
public string ConnectionString
|
public string ConnectionString
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ namespace DynamORM
|
|||||||
public bool DumpCommands { get; set; }
|
public bool DumpCommands { get; set; }
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicDatabase" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicDatabase" /> class.</summary>
|
||||||
/// <param name="provider">Database proider by name.</param>
|
/// <param name="provider">Database provider by name.</param>
|
||||||
/// <param name="connectionString">Connection string to provided database.</param>
|
/// <param name="connectionString">Connection string to provided database.</param>
|
||||||
/// <param name="options">Connection options.</param>
|
/// <param name="options">Connection options.</param>
|
||||||
public DynamicDatabase(string provider, string connectionString, DynamicDatabaseOptions options)
|
public DynamicDatabase(string provider, string connectionString, DynamicDatabaseOptions options)
|
||||||
@@ -117,7 +117,7 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicDatabase" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicDatabase" /> class.</summary>
|
||||||
/// <param name="provider">Database proider.</param>
|
/// <param name="provider">Database provider.</param>
|
||||||
/// <param name="connectionString">Connection string to provided database.</param>
|
/// <param name="connectionString">Connection string to provided database.</param>
|
||||||
/// <param name="options">Connection options.</param>
|
/// <param name="options">Connection options.</param>
|
||||||
public DynamicDatabase(DbProviderFactory provider, string connectionString, DynamicDatabaseOptions options)
|
public DynamicDatabase(DbProviderFactory provider, string connectionString, DynamicDatabaseOptions options)
|
||||||
@@ -146,6 +146,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
_singleConnection = (options & DynamicDatabaseOptions.SingleConnection) == DynamicDatabaseOptions.SingleConnection;
|
_singleConnection = (options & DynamicDatabaseOptions.SingleConnection) == DynamicDatabaseOptions.SingleConnection;
|
||||||
_singleTransaction = (options & DynamicDatabaseOptions.SingleTransaction) == DynamicDatabaseOptions.SingleTransaction;
|
_singleTransaction = (options & DynamicDatabaseOptions.SingleTransaction) == DynamicDatabaseOptions.SingleTransaction;
|
||||||
|
DumpCommands = (options & DynamicDatabaseOptions.DumpCommands) == DynamicDatabaseOptions.DumpCommands;
|
||||||
|
|
||||||
TransactionPool = new Dictionary<IDbConnection, Stack<IDbTransaction>>();
|
TransactionPool = new Dictionary<IDbConnection, Stack<IDbTransaction>>();
|
||||||
CommandsPool = new Dictionary<IDbConnection, List<IDbCommand>>();
|
CommandsPool = new Dictionary<IDbConnection, List<IDbCommand>>();
|
||||||
@@ -158,7 +159,7 @@ namespace DynamORM
|
|||||||
#region Table
|
#region Table
|
||||||
|
|
||||||
/// <summary>Gets dynamic table which is a simple ORM using dynamic objects.</summary>
|
/// <summary>Gets dynamic table which is a simple ORM using dynamic objects.</summary>
|
||||||
/// <param name="action">The action with nstance of <see cref="DynamicTable"/> as parameter.</param>
|
/// <param name="action">The action with instance of <see cref="DynamicTable"/> as parameter.</param>
|
||||||
/// <param name="table">Table name.</param>
|
/// <param name="table">Table name.</param>
|
||||||
/// <param name="keys">Override keys in schema.</param>
|
/// <param name="keys">Override keys in schema.</param>
|
||||||
public void Table(Action<dynamic> action, string table = "", string[] keys = null)
|
public void Table(Action<dynamic> action, string table = "", string[] keys = null)
|
||||||
@@ -169,7 +170,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Gets dynamic table which is a simple ORM using dynamic objects.</summary>
|
/// <summary>Gets dynamic table which is a simple ORM using dynamic objects.</summary>
|
||||||
/// <typeparam name="T">Type used to determine table name.</typeparam>
|
/// <typeparam name="T">Type used to determine table name.</typeparam>
|
||||||
/// <param name="action">The action with nstance of <see cref="DynamicTable"/> as parameter.</param>
|
/// <param name="action">The action with instance of <see cref="DynamicTable"/> as parameter.</param>
|
||||||
/// <param name="keys">Override keys in schema.</param>
|
/// <param name="keys">Override keys in schema.</param>
|
||||||
public void Table<T>(Action<dynamic> action, string[] keys = null)
|
public void Table<T>(Action<dynamic> action, string[] keys = null)
|
||||||
{
|
{
|
||||||
@@ -228,9 +229,9 @@ namespace DynamORM
|
|||||||
|
|
||||||
#region Schema
|
#region Schema
|
||||||
|
|
||||||
/// <summary>Builds table cache if nessesary and returns it.</summary>
|
/// <summary>Builds table cache if necessary and returns it.</summary>
|
||||||
/// <param name="table">Name of table for which build schema.</param>
|
/// <param name="table">Name of table for which build schema.</param>
|
||||||
/// <returns>Table chema.</returns>
|
/// <returns>Table schema.</returns>
|
||||||
public Dictionary<string, DynamicSchemaColumn> GetSchema(string table)
|
public Dictionary<string, DynamicSchemaColumn> GetSchema(string table)
|
||||||
{
|
{
|
||||||
Dictionary<string, DynamicSchemaColumn> schema = null;
|
Dictionary<string, DynamicSchemaColumn> schema = null;
|
||||||
@@ -242,7 +243,7 @@ namespace DynamORM
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Builds table cache if nessesary and returns it.</summary>
|
/// <summary>Builds table cache if necessary and returns it.</summary>
|
||||||
/// <typeparam name="T">Type of table for which build schema.</typeparam>
|
/// <typeparam name="T">Type of table for which build schema.</typeparam>
|
||||||
/// <returns>Table schema or null if type was anonymous.</returns>
|
/// <returns>Table schema or null if type was anonymous.</returns>
|
||||||
public Dictionary<string, DynamicSchemaColumn> GetSchema<T>()
|
public Dictionary<string, DynamicSchemaColumn> GetSchema<T>()
|
||||||
@@ -259,7 +260,7 @@ namespace DynamORM
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Builds table cache if nessesary and returns it.</summary>
|
/// <summary>Builds table cache if necessary and returns it.</summary>
|
||||||
/// <param name="table">Type of table for which build schema.</param>
|
/// <param name="table">Type of table for which build schema.</param>
|
||||||
/// <returns>Table schema or null if type was anonymous.</returns>
|
/// <returns>Table schema or null if type was anonymous.</returns>
|
||||||
public Dictionary<string, DynamicSchemaColumn> GetSchema(Type table)
|
public Dictionary<string, DynamicSchemaColumn> GetSchema(Type table)
|
||||||
@@ -558,7 +559,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Begins a global database transaction.</summary>
|
/// <summary>Begins a global database transaction.</summary>
|
||||||
/// <remarks>Using this method connection is set to single open
|
/// <remarks>Using this method connection is set to single open
|
||||||
/// connection untill all transactions are finished.</remarks>
|
/// connection until all transactions are finished.</remarks>
|
||||||
/// <returns>Returns <see cref="DynamicTransaction"/> representation.</returns>
|
/// <returns>Returns <see cref="DynamicTransaction"/> representation.</returns>
|
||||||
public IDbTransaction BeginTransaction()
|
public IDbTransaction BeginTransaction()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,27 +32,31 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
/// <summary>Represents database connection options.</summary>
|
/// <summary>Represents database connection options.</summary>
|
||||||
[Flags]
|
[Flags]
|
||||||
|
[System.Reflection.ObfuscationAttribute(Feature = "renaming", ApplyToMembers = true)]
|
||||||
public enum DynamicDatabaseOptions
|
public enum DynamicDatabaseOptions
|
||||||
{
|
{
|
||||||
/// <summary>No specific options.</summary>
|
/// <summary>No specific options.</summary>
|
||||||
None,
|
None = 0x00000000,
|
||||||
|
|
||||||
/// <summary>Only single presistent database connection.</summary>
|
/// <summary>Only single persistent database connection.</summary>
|
||||||
SingleConnection,
|
SingleConnection = 0x00000001,
|
||||||
|
|
||||||
/// <summary>Only one transaction.</summary>
|
/// <summary>Only one transaction.</summary>
|
||||||
SingleTransaction,
|
SingleTransaction = 0x00000002,
|
||||||
|
|
||||||
/// <summary>Database supports top syntax (SELECT TOP x ... FROM ...).</summary>
|
/// <summary>Database supports top syntax (SELECT TOP x ... FROM ...).</summary>
|
||||||
SupportTop,
|
SupportTop = 0x00000080,
|
||||||
|
|
||||||
/// <summary>Database supports limit offset syntax (SELECT ... FROM ... LIMIT x OFFSET y).</summary>
|
/// <summary>Database supports limit offset syntax (SELECT ... FROM ... LIMIT x OFFSET y).</summary>
|
||||||
SupportLimitOffset,
|
SupportLimitOffset = 0x00000040,
|
||||||
|
|
||||||
/// <summary>Database support standard schema.</summary>
|
/// <summary>Database support standard schema.</summary>
|
||||||
SupportSchema,
|
SupportSchema = 0x00000010,
|
||||||
|
|
||||||
/// <summary>Database support stored procedures (EXEC proc ...).</summary>
|
/// <summary>Database support stored procedures (EXEC procedure ...).</summary>
|
||||||
SupportStoredProcedures
|
SupportStoredProcedures = 0x00000020,
|
||||||
|
|
||||||
|
/// <summary>Debug option allowing to enable command dumps by default.</summary>
|
||||||
|
DumpCommands = 0x01000000,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
#region Type column map
|
#region Type column map
|
||||||
|
|
||||||
/// <summary>MapEnumerable of .NET types to DbType's.</summary>
|
/// <summary>MapEnumerable of .NET types to <see cref="DbType"/>.</summary>
|
||||||
public static readonly Dictionary<Type, DbType> TypeMap = new Dictionary<Type, DbType>()
|
public static readonly Dictionary<Type, DbType> TypeMap = new Dictionary<Type, DbType>()
|
||||||
{
|
{
|
||||||
{ typeof(byte), DbType.Byte },
|
{ typeof(byte), DbType.Byte },
|
||||||
@@ -115,7 +115,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Set <see cref="System.Data.IDbCommand"/> properties on the fly.</summary>
|
/// <summary>Set <see cref="System.Data.IDbCommand"/> properties on the fly.</summary>
|
||||||
/// <param name="command"><see cref="System.Data.IDbCommand"/> in which changes will be made.</param>
|
/// <param name="command"><see cref="System.Data.IDbCommand"/> in which changes will be made.</param>
|
||||||
/// <param name="commandType">Indicates or specifies how the System.Data.IDbCommand.CommandText property is interpreted.</param>
|
/// <param name="commandType">Indicates or specifies how the <see cref="System.Data.IDbCommand.CommandText"/> property is interpreted.</param>
|
||||||
/// <param name="commandTimeout">The wait time before terminating the attempt to execute a command and generating an error.</param>
|
/// <param name="commandTimeout">The wait time before terminating the attempt to execute a command and generating an error.</param>
|
||||||
/// <param name="commandText">The text command to run against the data source.</param>
|
/// <param name="commandText">The text command to run against the data source.</param>
|
||||||
/// <param name="args">Arguments used to format command.</param>
|
/// <param name="args">Arguments used to format command.</param>
|
||||||
@@ -153,7 +153,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Set <see cref="System.Data.IDbCommand"/> properties on the fly.</summary>
|
/// <summary>Set <see cref="System.Data.IDbCommand"/> properties on the fly.</summary>
|
||||||
/// <param name="command"><see cref="System.Data.IDbCommand"/> in which changes will be made.</param>
|
/// <param name="command"><see cref="System.Data.IDbCommand"/> in which changes will be made.</param>
|
||||||
/// <param name="commandType">Indicates or specifies how the System.Data.IDbCommand.CommandText property is interpreted.</param>
|
/// <param name="commandType">Indicates or specifies how the <see cref="System.Data.IDbCommand.CommandText"/> property is interpreted.</param>
|
||||||
/// <param name="commandText">The text command to run against the data source.</param>
|
/// <param name="commandText">The text command to run against the data source.</param>
|
||||||
/// <param name="args">Arguments used to format command.</param>
|
/// <param name="args">Arguments used to format command.</param>
|
||||||
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
/// <returns>Returns edited <see cref="System.Data.IDbCommand"/> instance.</returns>
|
||||||
@@ -248,7 +248,7 @@ namespace DynamORM
|
|||||||
var p = cmd.CreateParameter();
|
var p = cmd.CreateParameter();
|
||||||
p.ParameterName = name;
|
p.ParameterName = name;
|
||||||
|
|
||||||
if (item == null)
|
if (item == null || item == DBNull.Value)
|
||||||
p.Value = DBNull.Value;
|
p.Value = DBNull.Value;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -298,7 +298,7 @@ namespace DynamORM
|
|||||||
p.Scale = 4;
|
p.Scale = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
p.Value = item.Value;
|
p.Value = item.Value == null ? DBNull.Value : item.Value;
|
||||||
}
|
}
|
||||||
else if (item.Value == null || item.Value == DBNull.Value)
|
else if (item.Value == null || item.Value == DBNull.Value)
|
||||||
p.Value = DBNull.Value;
|
p.Value = DBNull.Value;
|
||||||
@@ -308,6 +308,8 @@ namespace DynamORM
|
|||||||
|
|
||||||
if (p.DbType == DbType.String)
|
if (p.DbType == DbType.String)
|
||||||
p.Size = item.Value.ToString().Length > 4000 ? -1 : 4000;
|
p.Size = item.Value.ToString().Length > 4000 ? -1 : 4000;
|
||||||
|
|
||||||
|
p.Value = item.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Parameters.Add(p);
|
cmd.Parameters.Add(p);
|
||||||
@@ -703,7 +705,7 @@ namespace DynamORM
|
|||||||
param.Scale,
|
param.Scale,
|
||||||
param.Precision,
|
param.Precision,
|
||||||
param.Scale,
|
param.Scale,
|
||||||
param.Value ?? "NULL",
|
param.Value is byte[] ? ConvertByteArrayToHexString((byte[])param.Value) : param.Value ?? "NULL",
|
||||||
param.Value != null ? param.Value.GetType().Name : "DBNull");
|
param.Value != null ? param.Value.GetType().Name : "DBNull");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -713,6 +715,32 @@ namespace DynamORM
|
|||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>Convert byte array to hex formatted string without separators.</summary>
|
||||||
|
/// <param name="data">Byte Array Data.</param>
|
||||||
|
/// <returns>Hex string representation of byte array.</returns>
|
||||||
|
private static string ConvertByteArrayToHexString(byte[] data)
|
||||||
|
{
|
||||||
|
return ConvertByteArrayToHexString(data, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Convert byte array to hex formatted string.</summary>
|
||||||
|
/// <param name="data">Byte Array Data.</param>
|
||||||
|
/// <param name="separatorEach">Put '-' each <c>separatorEach</c> characters.</param>
|
||||||
|
/// <returns>Hex string representation of byte array.</returns>
|
||||||
|
private static string ConvertByteArrayToHexString(byte[] data, int separatorEach)
|
||||||
|
{
|
||||||
|
int len = data.Length * 2;
|
||||||
|
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
sb.AppendFormat("{0:X}", data[(i / 2)] >> (((i % 2) == 0) ? 4 : 0) & 0x0F);
|
||||||
|
if ((separatorEach > 0) && ((i + 1) % separatorEach == 0))
|
||||||
|
sb.AppendFormat("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Command extensions
|
#endregion Command extensions
|
||||||
|
|
||||||
#region Dynamic extensions
|
#region Dynamic extensions
|
||||||
@@ -751,10 +779,16 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
var result = new ExpandoObject();
|
var result = new ExpandoObject();
|
||||||
var dict = result as IDictionary<string, object>;
|
var dict = result as IDictionary<string, object>;
|
||||||
|
var ot = o.GetType();
|
||||||
|
|
||||||
if (o.GetType() == typeof(ExpandoObject))
|
if (ot == typeof(ExpandoObject))
|
||||||
return o;
|
return o;
|
||||||
if (o.GetType() == typeof(NameValueCollection) || o.GetType().IsSubclassOf(typeof(NameValueCollection)))
|
|
||||||
|
if (o is IDictionary<string, object>)
|
||||||
|
((IDictionary<string, object>)o)
|
||||||
|
.ToList()
|
||||||
|
.ForEach(kvp => dict.Add(kvp.Key, kvp.Value));
|
||||||
|
else if (ot == typeof(NameValueCollection) || ot.IsSubclassOf(typeof(NameValueCollection)))
|
||||||
{
|
{
|
||||||
var nameValue = (NameValueCollection)o;
|
var nameValue = (NameValueCollection)o;
|
||||||
nameValue.Cast<string>()
|
nameValue.Cast<string>()
|
||||||
@@ -764,7 +798,7 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var mapper = DynamicMapperCache.GetMapper(o.GetType());
|
var mapper = DynamicMapperCache.GetMapper(ot);
|
||||||
|
|
||||||
if (mapper != null)
|
if (mapper != null)
|
||||||
{
|
{
|
||||||
@@ -774,7 +808,7 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var props = o.GetType().GetProperties();
|
var props = ot.GetProperties();
|
||||||
|
|
||||||
foreach (var item in props)
|
foreach (var item in props)
|
||||||
if (item.CanRead)
|
if (item.CanRead)
|
||||||
@@ -804,7 +838,7 @@ namespace DynamORM
|
|||||||
/// <summary>Convert data row row into dynamic object (upper case key).</summary>
|
/// <summary>Convert data row row into dynamic object (upper case key).</summary>
|
||||||
/// <param name="r">DataRow from which read.</param>
|
/// <param name="r">DataRow from which read.</param>
|
||||||
/// <returns>Generated dynamic object.</returns>
|
/// <returns>Generated dynamic object.</returns>
|
||||||
internal static dynamic RowToDynamicUpper(this DataRow r)
|
public static dynamic RowToDynamicUpper(this DataRow r)
|
||||||
{
|
{
|
||||||
dynamic e = new ExpandoObject();
|
dynamic e = new ExpandoObject();
|
||||||
var d = e as IDictionary<string, object>;
|
var d = e as IDictionary<string, object>;
|
||||||
@@ -845,7 +879,9 @@ namespace DynamORM
|
|||||||
/// <returns>Resulting dictionary.</returns>
|
/// <returns>Resulting dictionary.</returns>
|
||||||
public static IDictionary<string, object> ToDictionary(this object o)
|
public static IDictionary<string, object> ToDictionary(this object o)
|
||||||
{
|
{
|
||||||
return (IDictionary<string, object>)o.ToDynamic();
|
return o is IDictionary<string, object> ?
|
||||||
|
(IDictionary<string, object>)o :
|
||||||
|
(IDictionary<string, object>)o.ToDynamic();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Dynamic extensions
|
#endregion Dynamic extensions
|
||||||
@@ -987,7 +1023,7 @@ namespace DynamORM
|
|||||||
return (T)mapper.Create(item);
|
return (T)mapper.Create(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Fill object of speciied type with data from source object.</summary>
|
/// <summary>Fill object of specified type with data from source object.</summary>
|
||||||
/// <typeparam name="T">Type to which columnMap results.</typeparam>
|
/// <typeparam name="T">Type to which columnMap results.</typeparam>
|
||||||
/// <param name="item">Item to which columnMap data.</param>
|
/// <param name="item">Item to which columnMap data.</param>
|
||||||
/// <param name="source">Item from which extract data.</param>
|
/// <param name="source">Item from which extract data.</param>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace DynamORM
|
|||||||
/// <example>
|
/// <example>
|
||||||
/// <para>Assume that we have a table representing Users class.</para>
|
/// <para>Assume that we have a table representing Users class.</para>
|
||||||
/// <para>
|
/// <para>
|
||||||
/// <para>Let's take a look at <c>Query</c> posibilities. Assume we want
|
/// <para>Let's take a look at <c>Query</c> possibilities. Assume we want
|
||||||
/// to get enumerator for all records in database, mapped to our class
|
/// to get enumerator for all records in database, mapped to our class
|
||||||
/// instead of dynamic type we can use following syntax.</para>
|
/// instead of dynamic type we can use following syntax.</para>
|
||||||
/// <para>Approach first. Use dynamic <c>Query</c> method and just set type
|
/// <para>Approach first. Use dynamic <c>Query</c> method and just set type
|
||||||
@@ -54,13 +54,13 @@ namespace DynamORM
|
|||||||
/// <c>IEnumerable<object></c> (to which we must cast to) to map
|
/// <c>IEnumerable<object></c> (to which we must cast to) to map
|
||||||
/// object.</para>
|
/// object.</para>
|
||||||
/// <code>(db.Table<User>().Query(columns: "*") as IEnumerable<object>).MapEnumerable<User>();</code>
|
/// <code>(db.Table<User>().Query(columns: "*") as IEnumerable<object>).MapEnumerable<User>();</code>
|
||||||
/// You can also use generic approach. But be careful this method is currently avaliable thanks to framework hack.
|
/// You can also use generic approach. But be careful this method is currently available thanks to framework hack.
|
||||||
/// <code>(db.Table<User>().Query<User>() as IEnumerable<object>).Cast<User>()</code>
|
/// <code>(db.Table<User>().Query<User>() as IEnumerable<object>).Cast<User>()</code>
|
||||||
/// <para>Another approach uses existing methods, but still requires a
|
/// <para>Another approach uses existing methods, but still requires a
|
||||||
/// cast, because <c>Query</c> also returns dynamic object enumerator.</para>
|
/// cast, because <c>Query</c> also returns dynamic object enumerator.</para>
|
||||||
/// <code>(db.Table<User>().Query().Execute() as IEnumerable<object>).MapEnumerable<User>();</code>
|
/// <code>(db.Table<User>().Query().Execute() as IEnumerable<object>).MapEnumerable<User>();</code>
|
||||||
/// </para>
|
/// </para>
|
||||||
/// <para>Below you can find various invocations of dynamic and non dynemic
|
/// <para>Below you can find various invocations of dynamic and non dynamic
|
||||||
/// methods of this class. <c>x</c> variable is a class instance.
|
/// methods of this class. <c>x</c> variable is a class instance.
|
||||||
/// First various selects:</para>
|
/// First various selects:</para>
|
||||||
/// <code>x.Count(columns: "id");</code>
|
/// <code>x.Count(columns: "id");</code>
|
||||||
@@ -215,7 +215,9 @@ namespace DynamORM
|
|||||||
/// <remarks>If database doesn't support schema, only key columns are listed here.</remarks>
|
/// <remarks>If database doesn't support schema, only key columns are listed here.</remarks>
|
||||||
public virtual Dictionary<string, DynamicSchemaColumn> Schema { get; private set; }
|
public virtual Dictionary<string, DynamicSchemaColumn> Schema { get; private set; }
|
||||||
|
|
||||||
private DynamicTable() { }
|
private DynamicTable()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Initializes a new instance of the <see cref="DynamicTable" /> class.</summary>
|
/// <summary>Initializes a new instance of the <see cref="DynamicTable" /> class.</summary>
|
||||||
/// <param name="database">Database and connection management.</param>
|
/// <param name="database">Database and connection management.</param>
|
||||||
@@ -311,8 +313,8 @@ namespace DynamORM
|
|||||||
#region Basic Queries
|
#region Basic Queries
|
||||||
|
|
||||||
/// <summary>Enumerate the reader and yield the result.</summary>
|
/// <summary>Enumerate the reader and yield the result.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">SQL query containing numbered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formatted with
|
||||||
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Enumerator of objects expanded from query.</returns>
|
/// <returns>Enumerator of objects expanded from query.</returns>
|
||||||
@@ -354,8 +356,8 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Returns a single result.</summary>
|
/// <summary>Returns a single result.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">SQL query containing numbered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formatted with
|
||||||
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Result of a query.</returns>
|
/// <returns>Result of a query.</returns>
|
||||||
@@ -403,8 +405,8 @@ namespace DynamORM
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Execute non query.</summary>
|
/// <summary>Execute non query.</summary>
|
||||||
/// <param name="sql">Sql query containing numered parameters in format provided by
|
/// <param name="sql">SQL query containing numbered parameters in format provided by
|
||||||
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formated with
|
/// <see cref="DynamicDatabase.GetParameterName(object)"/> methods. Also names should be formatted with
|
||||||
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
/// <see cref="DynamicDatabase.DecorateName(string)"/> method.</param>
|
||||||
/// <param name="args">Arguments (parameters).</param>
|
/// <param name="args">Arguments (parameters).</param>
|
||||||
/// <returns>Number of affected rows.</returns>
|
/// <returns>Number of affected rows.</returns>
|
||||||
@@ -472,9 +474,9 @@ namespace DynamORM
|
|||||||
return new DynamicInsertQueryBuilder(this);
|
return new DynamicInsertQueryBuilder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Adds a record to the database. You can pass in an Anonymous object, an ExpandoObject,
|
/// <summary>Adds a record to the database. You can pass in an Anonymous object, an <see cref="ExpandoObject"/>,
|
||||||
/// A regular old POCO, or a NameValueColletion from a Request.Form or Request.QueryString.</summary>
|
/// A regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
||||||
/// <param name="o">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
/// <param name="o">Anonymous object, an <see cref="ExpandoObject"/>, a regular old POCO, or a NameValueCollection
|
||||||
/// from a Request.Form or Request.QueryString, containing fields to update.</param>
|
/// from a Request.Form or Request.QueryString, containing fields to update.</param>
|
||||||
/// <returns>Number of updated rows.</returns>
|
/// <returns>Number of updated rows.</returns>
|
||||||
public virtual int Insert(object o)
|
public virtual int Insert(object o)
|
||||||
@@ -499,7 +501,7 @@ namespace DynamORM
|
|||||||
/// a regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
/// a regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
||||||
/// <param name="o">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
/// <param name="o">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
||||||
/// from a Request.Form or Request.QueryString, containing fields to update.</param>
|
/// from a Request.Form or Request.QueryString, containing fields to update.</param>
|
||||||
/// <param name="key">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
/// <param name="key">Anonymous object, an <see cref="ExpandoObject"/>, a regular old POCO, or a NameValueCollection
|
||||||
/// from a Request.Form or Request.QueryString, containing fields with conditions.</param>
|
/// from a Request.Form or Request.QueryString, containing fields with conditions.</param>
|
||||||
/// <returns>Number of updated rows.</returns>
|
/// <returns>Number of updated rows.</returns>
|
||||||
public virtual int Update(object o, object key)
|
public virtual int Update(object o, object key)
|
||||||
@@ -512,7 +514,7 @@ namespace DynamORM
|
|||||||
|
|
||||||
/// <summary>Updates a record in the database using schema. You can pass in an Anonymous object, an ExpandoObject,
|
/// <summary>Updates a record in the database using schema. You can pass in an Anonymous object, an ExpandoObject,
|
||||||
/// a regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
/// a regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
||||||
/// <param name="o">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
/// <param name="o">Anonymous object, an <see cref="ExpandoObject"/>, a regular old POCO, or a NameValueCollection
|
||||||
/// from a Request.Form or Request.QueryString, containing fields to update and conditions.</param>
|
/// from a Request.Form or Request.QueryString, containing fields to update and conditions.</param>
|
||||||
/// <returns>Number of updated rows.</returns>
|
/// <returns>Number of updated rows.</returns>
|
||||||
public virtual int Update(object o)
|
public virtual int Update(object o)
|
||||||
@@ -533,9 +535,9 @@ namespace DynamORM
|
|||||||
return new DynamicDeleteQueryBuilder(this);
|
return new DynamicDeleteQueryBuilder(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Removes a record from the database. You can pass in an Anonymous object, an ExpandoObject,
|
/// <summary>Removes a record from the database. You can pass in an Anonymous object, an <see cref="ExpandoObject"/>,
|
||||||
/// A regular old POCO, or a NameValueColletion from a Request.Form or Request.QueryString.</summary>
|
/// A regular old POCO, or a NameValueCollection from a Request.Form or Request.QueryString.</summary>
|
||||||
/// <param name="o">Anonymous object, an ExpandoObject, a regular old POCO, or a NameValueCollection
|
/// <param name="o">Anonymous object, an <see cref="ExpandoObject"/>, a regular old POCO, or a NameValueCollection
|
||||||
/// from a Request.Form or Request.QueryString, containing fields with where conditions.</param>
|
/// from a Request.Form or Request.QueryString, containing fields with where conditions.</param>
|
||||||
/// <param name="schema">If <c>true</c> use schema to determine key columns and ignore those which
|
/// <param name="schema">If <c>true</c> use schema to determine key columns and ignore those which
|
||||||
/// aren't keys.</param>
|
/// aren't keys.</param>
|
||||||
@@ -579,12 +581,15 @@ namespace DynamORM
|
|||||||
case "Insert":
|
case "Insert":
|
||||||
result = DynamicInsert(args, info, types);
|
result = DynamicInsert(args, info, types);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Update":
|
case "Update":
|
||||||
result = DynamicUpdate(args, info, types);
|
result = DynamicUpdate(args, info, types);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Delete":
|
case "Delete":
|
||||||
result = DynamicDelete(args, info, types);
|
result = DynamicDelete(args, info, types);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
result = DynamicQuery(args, info, op, types);
|
result = DynamicQuery(args, info, op, types);
|
||||||
break;
|
break;
|
||||||
@@ -614,14 +619,17 @@ namespace DynamORM
|
|||||||
builder.Table(args[i].ToString());
|
builder.Table(args[i].ToString());
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "values":
|
case "values":
|
||||||
builder.Insert(args[i]);
|
builder.Insert(args[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "type":
|
case "type":
|
||||||
if (types == null || types.Count == 0)
|
if (types == null || types.Count == 0)
|
||||||
HandleTypeArgument<DynamicInsertQueryBuilder>(args, info, ref types, builder, i);
|
HandleTypeArgument<DynamicInsertQueryBuilder>(args, info, ref types, builder, i);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
builder.Insert(name, args[i]);
|
builder.Insert(name, args[i]);
|
||||||
break;
|
break;
|
||||||
@@ -654,20 +662,25 @@ namespace DynamORM
|
|||||||
builder.Table(args[i].ToString());
|
builder.Table(args[i].ToString());
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "update":
|
case "update":
|
||||||
builder.Update(args[i]);
|
builder.Update(args[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "values":
|
case "values":
|
||||||
builder.Values(args[i]);
|
builder.Values(args[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "where":
|
case "where":
|
||||||
builder.Where(args[i]);
|
builder.Where(args[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "type":
|
case "type":
|
||||||
if (types == null || types.Count == 0)
|
if (types == null || types.Count == 0)
|
||||||
HandleTypeArgument(args, info, ref types, builder, i);
|
HandleTypeArgument(args, info, ref types, builder, i);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
builder.Update(name, args[i]);
|
builder.Update(name, args[i]);
|
||||||
break;
|
break;
|
||||||
@@ -700,17 +713,21 @@ namespace DynamORM
|
|||||||
builder.Table(args[i].ToString());
|
builder.Table(args[i].ToString());
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "where":
|
case "where":
|
||||||
builder.Where(args[i], false);
|
builder.Where(args[i], false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "delete":
|
case "delete":
|
||||||
builder.Where(args[i], true);
|
builder.Where(args[i], true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "type":
|
case "type":
|
||||||
if (types == null || types.Count == 0)
|
if (types == null || types.Count == 0)
|
||||||
HandleTypeArgument<DynamicDeleteQueryBuilder>(args, info, ref types, builder, i);
|
HandleTypeArgument<DynamicDeleteQueryBuilder>(args, info, ref types, builder, i);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
builder.Where(name, args[i]);
|
builder.Where(name, args[i]);
|
||||||
break;
|
break;
|
||||||
@@ -751,6 +768,7 @@ namespace DynamORM
|
|||||||
builder.OrderBy((DynamicColumn)args[i]);
|
builder.OrderBy((DynamicColumn)args[i]);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "group":
|
case "group":
|
||||||
if (args[i] is string)
|
if (args[i] is string)
|
||||||
builder.GroupBy(((string)args[i]).Split(','));
|
builder.GroupBy(((string)args[i]).Split(','));
|
||||||
@@ -762,6 +780,7 @@ namespace DynamORM
|
|||||||
builder.GroupBy((DynamicColumn)args[i]);
|
builder.GroupBy((DynamicColumn)args[i]);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "columns":
|
case "columns":
|
||||||
if (args[i] is string)
|
if (args[i] is string)
|
||||||
builder.Select(((string)args[i]).Split(','));
|
builder.Select(((string)args[i]).Split(','));
|
||||||
@@ -773,19 +792,23 @@ namespace DynamORM
|
|||||||
builder.Select((DynamicColumn)args[i]);
|
builder.Select((DynamicColumn)args[i]);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "where":
|
case "where":
|
||||||
builder.Where(args[i]);
|
builder.Where(args[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "table":
|
case "table":
|
||||||
if (args[i] is string)
|
if (args[i] is string)
|
||||||
builder.Table(args[i].ToString());
|
builder.Table(args[i].ToString());
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "type":
|
case "type":
|
||||||
if (types == null || types.Count == 0)
|
if (types == null || types.Count == 0)
|
||||||
HandleTypeArgument<DynamicSelectQueryBuilder>(args, info, ref types, builder, i);
|
HandleTypeArgument<DynamicSelectQueryBuilder>(args, info, ref types, builder, i);
|
||||||
else goto default;
|
else goto default;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
builder.Where(name, args[i]);
|
builder.Where(name, args[i]);
|
||||||
break;
|
break;
|
||||||
@@ -820,6 +843,8 @@ namespace DynamORM
|
|||||||
|
|
||||||
if (op == "Count" && result is long)
|
if (op == "Count" && result is long)
|
||||||
result = (int)(long)result;
|
result = (int)(long)result;
|
||||||
|
else if (result == DBNull.Value)
|
||||||
|
result = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -851,7 +876,7 @@ namespace DynamORM
|
|||||||
if (op == "Scalar")
|
if (op == "Scalar")
|
||||||
{
|
{
|
||||||
if (builder.Columns.Count != 1)
|
if (builder.Columns.Count != 1)
|
||||||
throw new InvalidOperationException("You must select one column in scalar steatement.");
|
throw new InvalidOperationException("You must select one column in scalar statement.");
|
||||||
|
|
||||||
result = Scalar(builder);
|
result = Scalar(builder);
|
||||||
}
|
}
|
||||||
@@ -905,12 +930,13 @@ namespace DynamORM
|
|||||||
/// freeing, releasing, or resetting unmanaged resources.</summary>
|
/// freeing, releasing, or resetting unmanaged resources.</summary>
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Database.RemoveFromCache(this);
|
|
||||||
|
|
||||||
// Lose reference but don't kill it.
|
// Lose reference but don't kill it.
|
||||||
if (Database != null)
|
if (Database != null)
|
||||||
|
{
|
||||||
|
Database.RemoveFromCache(this);
|
||||||
Database = null;
|
Database = null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion IDisposable Members
|
#endregion IDisposable Members
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace DynamORM.Helpers
|
|||||||
{
|
{
|
||||||
#region Mono or .NET Framework detection
|
#region Mono or .NET Framework detection
|
||||||
|
|
||||||
/// <summary>This is preaty simple trick.</summary>
|
/// <summary>This is pretty simple trick.</summary>
|
||||||
private static bool _isMono = Type.GetType("Mono.Runtime") != null;
|
private static bool _isMono = Type.GetType("Mono.Runtime") != null;
|
||||||
|
|
||||||
/// <summary>Gets a value indicating whether application is running under mono runtime.</summary>
|
/// <summary>Gets a value indicating whether application is running under mono runtime.</summary>
|
||||||
@@ -98,7 +98,7 @@ namespace DynamORM.Helpers
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Extension method allowing to easyly extract generic type
|
/// <summary>Extension method allowing to easily extract generic type
|
||||||
/// arguments from <see cref="InvokeMemberBinder"/> assuming that it
|
/// arguments from <see cref="InvokeMemberBinder"/> assuming that it
|
||||||
/// inherits from
|
/// inherits from
|
||||||
/// <c>Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder</c>
|
/// <c>Microsoft.CSharp.RuntimeBinder.ICSharpInvokeOrInvokeMemberBinder</c>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace DynamORM.Mapper
|
namespace DynamORM.Mapper
|
||||||
{
|
{
|
||||||
/// <summary>Class with maper cache.</summary>
|
/// <summary>Class with mapper cache.</summary>
|
||||||
public static class DynamicMapperCache
|
public static class DynamicMapperCache
|
||||||
{
|
{
|
||||||
private static readonly object SyncLock = new object();
|
private static readonly object SyncLock = new object();
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ namespace DynamORM.Mapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Create object of <see cref="DynamicTypeMap.Type"/> type and fill values from <c>source</c>.</summary>
|
/// <summary>Create object of <see cref="DynamicTypeMap.Type"/> type and fill values from <c>source</c>.</summary>
|
||||||
/// <param name="source">Object containing values that will be mapped to newy created object.</param>
|
/// <param name="source">Object containing values that will be mapped to newly created object.</param>
|
||||||
/// <returns>New object of <see cref="DynamicTypeMap.Type"/> type with matching values from <c>source</c>.</returns>
|
/// <returns>New object of <see cref="DynamicTypeMap.Type"/> type with matching values from <c>source</c>.</returns>
|
||||||
public object Create(object source)
|
public object Create(object source)
|
||||||
{
|
{
|
||||||
@@ -114,7 +114,7 @@ namespace DynamORM.Mapper
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Fill values from <c>source</c> to <see cref="DynamicTypeMap.Type"/> object in <c>destination</c>.</summary>
|
/// <summary>Fill values from <c>source</c> to <see cref="DynamicTypeMap.Type"/> object in <c>destination</c>.</summary>
|
||||||
/// <param name="source">Object containing values that will be mapped to newy created object.</param>
|
/// <param name="source">Object containing values that will be mapped to newly created object.</param>
|
||||||
/// <param name="destination">Object of <see cref="DynamicTypeMap.Type"/> type to which copy values from <c>source</c>.</param>
|
/// <param name="destination">Object of <see cref="DynamicTypeMap.Type"/> type to which copy values from <c>source</c>.</param>
|
||||||
/// <returns>Object of <see cref="DynamicTypeMap.Type"/> type with matching values from <c>source</c>.</returns>
|
/// <returns>Object of <see cref="DynamicTypeMap.Type"/> type with matching values from <c>source</c>.</returns>
|
||||||
public object Map(object source, object destination)
|
public object Map(object source, object destination)
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ namespace DynamORM.Mapper
|
|||||||
/// <summary>Gets or sets name.</summary>
|
/// <summary>Gets or sets name.</summary>
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
/// <summary>Gets or sets a value indicating whether overide database
|
/// <summary>Gets or sets a value indicating whether override database
|
||||||
/// schema values.</summary>
|
/// schema values.</summary>
|
||||||
/// <remarks>If database doeesn't support schema, you still have to
|
/// <remarks>If database doesn't support schema, you still have to
|
||||||
/// set this to true to get schema from type.</remarks>
|
/// set this to true to get schema from type.</remarks>
|
||||||
public bool Override { get; set; }
|
public bool Override { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user