This commit is contained in:
grzegorz.russek
2019-12-18 16:13:08 +00:00
parent 552f7a1f86
commit 7ce3a00613
6 changed files with 155 additions and 115 deletions

View File

@@ -8176,8 +8176,8 @@ namespace DynamORM
{
IsDisposed = true;
if (Schema != null)
Schema.Clear();
////if (Schema != null)
//// Schema.Clear();
Owner = Name = Alias = null;
Schema = null;
@@ -13471,6 +13471,8 @@ namespace DynamORM
if (Type.IsArray || IsGnericEnumerable)
{
if (val != null)
{
if (val is IEnumerable<object>)
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
@@ -13480,6 +13482,12 @@ namespace DynamORM
foreach (var e in lst)
((Array)value).SetValue(e, i++);
}
else
{
value = Array.CreateInstance(ArrayType, 1);
((Array)value).SetValue(GetElementVal(ArrayType, val), 0);
}
}
else
value = Array.CreateInstance(ArrayType, 0);
}
@@ -13535,7 +13543,7 @@ namespace DynamORM
Guid g;
return Guid.TryParse((string)val, out g) ? g : Guid.Empty;
}
else if (IsDataContract)
else if (!typeof(IConvertible).IsAssignableFrom(type) && (IsDataContract || (!type.IsValueType && val is IDictionary<string, object>)))
return val.Map(type);
else
try
@@ -13608,6 +13616,10 @@ namespace DynamORM
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
{
// Skip indexers
if (pi.GetIndexParameters().Any())
continue;
ColumnAttribute attr = null;
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
@@ -13957,7 +13969,9 @@ namespace DynamORM
/// <returns>Returns <c>true</c> if operation was successful.</returns>
public virtual bool Insert(DynamicDatabase db)
{
if (db.Insert(this.GetType())
using (var query = db.Insert(this.GetType()))
{
if (query
.Values(x => this)
.Execute() > 0)
{
@@ -13965,6 +13979,7 @@ namespace DynamORM
SetDynamicEntityState(DynamicEntityState.Existing);
return true;
}
}
return false;
}
@@ -13976,8 +13991,8 @@ namespace DynamORM
{
var t = GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.Update(t);
using (var query = db.Update(t))
{
MakeQueryWhere(mapper, query);
if (_changedFields.Any())
@@ -14018,6 +14033,7 @@ namespace DynamORM
return true;
}
}
/// <summary>Deletes this object from database.</summary>
/// <param name="db">The database.</param>
@@ -14027,14 +14043,15 @@ namespace DynamORM
var t = this.GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.Delete(t);
using (var query = db.Delete(t))
{
MakeQueryWhere(mapper, query);
if (query.Execute() == 0)
return false;
SetDynamicEntityState(DynamicEntityState.Deleted);
}
return true;
}
@@ -14051,7 +14068,8 @@ namespace DynamORM
{
var t = this.GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.From(t);
using (var query = db.From(t))
{
MakeQueryWhere(mapper, query);
var o = (query.Execute() as IEnumerable<dynamic>).FirstOrDefault();
@@ -14062,6 +14080,7 @@ namespace DynamORM
SetDynamicEntityState(DynamicEntityState.Existing);
_changedFields.Clear();
}
return true;
}

View File

@@ -139,8 +139,8 @@ namespace DynamORM.Builders.Implementation
{
IsDisposed = true;
if (Schema != null)
Schema.Clear();
////if (Schema != null)
//// Schema.Clear();
Owner = Name = Alias = null;
Schema = null;

View File

@@ -167,6 +167,8 @@ namespace DynamORM.Mapper
if (Type.IsArray || IsGnericEnumerable)
{
if (val != null)
{
if (val is IEnumerable<object>)
{
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
@@ -176,6 +178,12 @@ namespace DynamORM.Mapper
foreach (var e in lst)
((Array)value).SetValue(e, i++);
}
else
{
value = Array.CreateInstance(ArrayType, 1);
((Array)value).SetValue(GetElementVal(ArrayType, val), 0);
}
}
else
value = Array.CreateInstance(ArrayType, 0);
}
@@ -231,7 +239,7 @@ namespace DynamORM.Mapper
Guid g;
return Guid.TryParse((string)val, out g) ? g : Guid.Empty;
}
else if (IsDataContract)
else if (!typeof(IConvertible).IsAssignableFrom(type) && (IsDataContract || (!type.IsValueType && val is IDictionary<string, object>)))
return val.Map(type);
else
try

View File

@@ -82,6 +82,10 @@ namespace DynamORM.Mapper
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
{
// Skip indexers
if (pi.GetIndexParameters().Any())
continue;
ColumnAttribute attr = null;
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);

View File

@@ -102,7 +102,9 @@ namespace DynamORM.Objects
/// <returns>Returns <c>true</c> if operation was successful.</returns>
public virtual bool Insert(DynamicDatabase db)
{
if (db.Insert(this.GetType())
using (var query = db.Insert(this.GetType()))
{
if (query
.Values(x => this)
.Execute() > 0)
{
@@ -110,6 +112,7 @@ namespace DynamORM.Objects
SetDynamicEntityState(DynamicEntityState.Existing);
return true;
}
}
return false;
}
@@ -121,7 +124,8 @@ namespace DynamORM.Objects
{
var t = GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.Update(t);
using (var query = db.Update(t))
{
MakeQueryWhere(mapper, query);
@@ -163,6 +167,7 @@ namespace DynamORM.Objects
return true;
}
}
/// <summary>Deletes this object from database.</summary>
/// <param name="db">The database.</param>
@@ -172,14 +177,15 @@ namespace DynamORM.Objects
var t = this.GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.Delete(t);
using (var query = db.Delete(t))
{
MakeQueryWhere(mapper, query);
if (query.Execute() == 0)
return false;
SetDynamicEntityState(DynamicEntityState.Deleted);
}
return true;
}
@@ -196,7 +202,8 @@ namespace DynamORM.Objects
{
var t = this.GetType();
var mapper = DynamicMapperCache.GetMapper(t);
var query = db.From(t);
using (var query = db.From(t))
{
MakeQueryWhere(mapper, query);
var o = (query.Execute() as IEnumerable<dynamic>).FirstOrDefault();
@@ -207,6 +214,7 @@ namespace DynamORM.Objects
SetDynamicEntityState(DynamicEntityState.Existing);
_changedFields.Clear();
}
return true;
}

View File

@@ -23,7 +23,8 @@ namespace DynamORM.Objects
/// <returns>Objects enumerator.</returns>
public virtual IEnumerable<T> GetAll()
{
return EnumerateQuery(_database.From<T>());
using (var q = _database.From<T>())
return EnumerateQuery(q);
}
/// <summary>Get rows from database by custom query.</summary>