This commit is contained in:
@@ -8176,8 +8176,8 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
IsDisposed = true;
|
IsDisposed = true;
|
||||||
|
|
||||||
if (Schema != null)
|
////if (Schema != null)
|
||||||
Schema.Clear();
|
//// Schema.Clear();
|
||||||
|
|
||||||
Owner = Name = Alias = null;
|
Owner = Name = Alias = null;
|
||||||
Schema = null;
|
Schema = null;
|
||||||
@@ -13472,13 +13472,21 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
if (val != null)
|
if (val != null)
|
||||||
{
|
{
|
||||||
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
|
if (val is IEnumerable<object>)
|
||||||
|
{
|
||||||
|
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
|
||||||
|
|
||||||
value = Array.CreateInstance(ArrayType, lst.Count);
|
value = Array.CreateInstance(ArrayType, lst.Count);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var e in lst)
|
foreach (var e in lst)
|
||||||
((Array)value).SetValue(e, i++);
|
((Array)value).SetValue(e, i++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = Array.CreateInstance(ArrayType, 1);
|
||||||
|
((Array)value).SetValue(GetElementVal(ArrayType, val), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
value = Array.CreateInstance(ArrayType, 0);
|
value = Array.CreateInstance(ArrayType, 0);
|
||||||
@@ -13535,7 +13543,7 @@ namespace DynamORM
|
|||||||
Guid g;
|
Guid g;
|
||||||
return Guid.TryParse((string)val, out g) ? g : Guid.Empty;
|
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);
|
return val.Map(type);
|
||||||
else
|
else
|
||||||
try
|
try
|
||||||
@@ -13608,6 +13616,10 @@ namespace DynamORM
|
|||||||
|
|
||||||
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
||||||
{
|
{
|
||||||
|
// Skip indexers
|
||||||
|
if (pi.GetIndexParameters().Any())
|
||||||
|
continue;
|
||||||
|
|
||||||
ColumnAttribute attr = null;
|
ColumnAttribute attr = null;
|
||||||
|
|
||||||
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
||||||
@@ -13957,13 +13969,16 @@ namespace DynamORM
|
|||||||
/// <returns>Returns <c>true</c> if operation was successful.</returns>
|
/// <returns>Returns <c>true</c> if operation was successful.</returns>
|
||||||
public virtual bool Insert(DynamicDatabase db)
|
public virtual bool Insert(DynamicDatabase db)
|
||||||
{
|
{
|
||||||
if (db.Insert(this.GetType())
|
using (var query = db.Insert(this.GetType()))
|
||||||
.Values(x => this)
|
|
||||||
.Execute() > 0)
|
|
||||||
{
|
{
|
||||||
_changedFields.Clear();
|
if (query
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
.Values(x => this)
|
||||||
return true;
|
.Execute() > 0)
|
||||||
|
{
|
||||||
|
_changedFields.Clear();
|
||||||
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -13976,47 +13991,48 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
var t = GetType();
|
var t = GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
var mapper = DynamicMapperCache.GetMapper(t);
|
||||||
var query = db.Update(t);
|
using (var query = db.Update(t))
|
||||||
|
|
||||||
MakeQueryWhere(mapper, query);
|
|
||||||
|
|
||||||
if (_changedFields.Any())
|
|
||||||
{
|
{
|
||||||
bool any = false;
|
MakeQueryWhere(mapper, query);
|
||||||
|
|
||||||
foreach (var cf in _changedFields)
|
if (_changedFields.Any())
|
||||||
{
|
{
|
||||||
var cn = mapper.PropertyMap[cf.Key];
|
bool any = false;
|
||||||
var pm = mapper.ColumnsMap[cn.ToLower()];
|
|
||||||
if (pm.Ignore)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (pm.Column != null)
|
foreach (var cf in _changedFields)
|
||||||
{
|
{
|
||||||
if (pm.Column.IsKey)
|
var cn = mapper.PropertyMap[cf.Key];
|
||||||
|
var pm = mapper.ColumnsMap[cn.ToLower()];
|
||||||
|
if (pm.Ignore)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!pm.Column.AllowNull && cf.Value == null)
|
if (pm.Column != null)
|
||||||
continue;
|
{
|
||||||
|
if (pm.Column.IsKey)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!pm.Column.AllowNull && cf.Value == null)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.Values(cn, cf.Value);
|
||||||
|
any = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
query.Values(cn, cf.Value);
|
if (!any)
|
||||||
any = true;
|
query.Set(x => this);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (!any)
|
|
||||||
query.Set(x => this);
|
query.Set(x => this);
|
||||||
|
|
||||||
|
if (query.Execute() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
|
_changedFields.Clear();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
query.Set(x => this);
|
|
||||||
|
|
||||||
if (query.Execute() == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
|
||||||
_changedFields.Clear();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Deletes this object from database.</summary>
|
/// <summary>Deletes this object from database.</summary>
|
||||||
@@ -14027,14 +14043,15 @@ namespace DynamORM
|
|||||||
var t = this.GetType();
|
var t = this.GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
var mapper = DynamicMapperCache.GetMapper(t);
|
||||||
|
|
||||||
var query = db.Delete(t);
|
using (var query = db.Delete(t))
|
||||||
|
{
|
||||||
|
MakeQueryWhere(mapper, query);
|
||||||
|
|
||||||
MakeQueryWhere(mapper, query);
|
if (query.Execute() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (query.Execute() == 0)
|
SetDynamicEntityState(DynamicEntityState.Deleted);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Deleted);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -14051,17 +14068,19 @@ namespace DynamORM
|
|||||||
{
|
{
|
||||||
var t = this.GetType();
|
var t = this.GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
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();
|
MakeQueryWhere(mapper, query);
|
||||||
|
var o = (query.Execute() as IEnumerable<dynamic>).FirstOrDefault();
|
||||||
|
|
||||||
if (o == null)
|
if (o == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mapper.Map(o, this);
|
mapper.Map(o, this);
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
_changedFields.Clear();
|
_changedFields.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,8 +139,8 @@ namespace DynamORM.Builders.Implementation
|
|||||||
{
|
{
|
||||||
IsDisposed = true;
|
IsDisposed = true;
|
||||||
|
|
||||||
if (Schema != null)
|
////if (Schema != null)
|
||||||
Schema.Clear();
|
//// Schema.Clear();
|
||||||
|
|
||||||
Owner = Name = Alias = null;
|
Owner = Name = Alias = null;
|
||||||
Schema = null;
|
Schema = null;
|
||||||
|
|||||||
@@ -168,13 +168,21 @@ namespace DynamORM.Mapper
|
|||||||
{
|
{
|
||||||
if (val != null)
|
if (val != null)
|
||||||
{
|
{
|
||||||
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
|
if (val is IEnumerable<object>)
|
||||||
|
{
|
||||||
|
var lst = (val as IEnumerable<object>).Select(x => GetElementVal(ArrayType, x)).ToList();
|
||||||
|
|
||||||
value = Array.CreateInstance(ArrayType, lst.Count);
|
value = Array.CreateInstance(ArrayType, lst.Count);
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (var e in lst)
|
foreach (var e in lst)
|
||||||
((Array)value).SetValue(e, i++);
|
((Array)value).SetValue(e, i++);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = Array.CreateInstance(ArrayType, 1);
|
||||||
|
((Array)value).SetValue(GetElementVal(ArrayType, val), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
value = Array.CreateInstance(ArrayType, 0);
|
value = Array.CreateInstance(ArrayType, 0);
|
||||||
@@ -231,7 +239,7 @@ namespace DynamORM.Mapper
|
|||||||
Guid g;
|
Guid g;
|
||||||
return Guid.TryParse((string)val, out g) ? g : Guid.Empty;
|
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);
|
return val.Map(type);
|
||||||
else
|
else
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -82,6 +82,10 @@ namespace DynamORM.Mapper
|
|||||||
|
|
||||||
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
foreach (PropertyInfo pi in GetAllMembers(Type).Where(x => x is PropertyInfo).Cast<PropertyInfo>())
|
||||||
{
|
{
|
||||||
|
// Skip indexers
|
||||||
|
if (pi.GetIndexParameters().Any())
|
||||||
|
continue;
|
||||||
|
|
||||||
ColumnAttribute attr = null;
|
ColumnAttribute attr = null;
|
||||||
|
|
||||||
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
object[] attrs = pi.GetCustomAttributes(typeof(ColumnAttribute), true);
|
||||||
|
|||||||
@@ -102,13 +102,16 @@ namespace DynamORM.Objects
|
|||||||
/// <returns>Returns <c>true</c> if operation was successful.</returns>
|
/// <returns>Returns <c>true</c> if operation was successful.</returns>
|
||||||
public virtual bool Insert(DynamicDatabase db)
|
public virtual bool Insert(DynamicDatabase db)
|
||||||
{
|
{
|
||||||
if (db.Insert(this.GetType())
|
using (var query = db.Insert(this.GetType()))
|
||||||
.Values(x => this)
|
|
||||||
.Execute() > 0)
|
|
||||||
{
|
{
|
||||||
_changedFields.Clear();
|
if (query
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
.Values(x => this)
|
||||||
return true;
|
.Execute() > 0)
|
||||||
|
{
|
||||||
|
_changedFields.Clear();
|
||||||
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -121,47 +124,49 @@ namespace DynamORM.Objects
|
|||||||
{
|
{
|
||||||
var t = GetType();
|
var t = GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
var mapper = DynamicMapperCache.GetMapper(t);
|
||||||
var query = db.Update(t);
|
using (var query = db.Update(t))
|
||||||
|
|
||||||
MakeQueryWhere(mapper, query);
|
|
||||||
|
|
||||||
if (_changedFields.Any())
|
|
||||||
{
|
{
|
||||||
bool any = false;
|
|
||||||
|
|
||||||
foreach (var cf in _changedFields)
|
MakeQueryWhere(mapper, query);
|
||||||
|
|
||||||
|
if (_changedFields.Any())
|
||||||
{
|
{
|
||||||
var cn = mapper.PropertyMap[cf.Key];
|
bool any = false;
|
||||||
var pm = mapper.ColumnsMap[cn.ToLower()];
|
|
||||||
if (pm.Ignore)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (pm.Column != null)
|
foreach (var cf in _changedFields)
|
||||||
{
|
{
|
||||||
if (pm.Column.IsKey)
|
var cn = mapper.PropertyMap[cf.Key];
|
||||||
|
var pm = mapper.ColumnsMap[cn.ToLower()];
|
||||||
|
if (pm.Ignore)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!pm.Column.AllowNull && cf.Value == null)
|
if (pm.Column != null)
|
||||||
continue;
|
{
|
||||||
|
if (pm.Column.IsKey)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!pm.Column.AllowNull && cf.Value == null)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
query.Values(cn, cf.Value);
|
||||||
|
any = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
query.Values(cn, cf.Value);
|
if (!any)
|
||||||
any = true;
|
query.Set(x => this);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (!any)
|
|
||||||
query.Set(x => this);
|
query.Set(x => this);
|
||||||
|
|
||||||
|
if (query.Execute() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
|
_changedFields.Clear();
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
query.Set(x => this);
|
|
||||||
|
|
||||||
if (query.Execute() == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
|
||||||
_changedFields.Clear();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Deletes this object from database.</summary>
|
/// <summary>Deletes this object from database.</summary>
|
||||||
@@ -172,14 +177,15 @@ namespace DynamORM.Objects
|
|||||||
var t = this.GetType();
|
var t = this.GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
var mapper = DynamicMapperCache.GetMapper(t);
|
||||||
|
|
||||||
var query = db.Delete(t);
|
using (var query = db.Delete(t))
|
||||||
|
{
|
||||||
|
MakeQueryWhere(mapper, query);
|
||||||
|
|
||||||
MakeQueryWhere(mapper, query);
|
if (query.Execute() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (query.Execute() == 0)
|
SetDynamicEntityState(DynamicEntityState.Deleted);
|
||||||
return false;
|
}
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Deleted);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -196,17 +202,19 @@ namespace DynamORM.Objects
|
|||||||
{
|
{
|
||||||
var t = this.GetType();
|
var t = this.GetType();
|
||||||
var mapper = DynamicMapperCache.GetMapper(t);
|
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();
|
MakeQueryWhere(mapper, query);
|
||||||
|
var o = (query.Execute() as IEnumerable<dynamic>).FirstOrDefault();
|
||||||
|
|
||||||
if (o == null)
|
if (o == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mapper.Map(o, this);
|
mapper.Map(o, this);
|
||||||
|
|
||||||
SetDynamicEntityState(DynamicEntityState.Existing);
|
SetDynamicEntityState(DynamicEntityState.Existing);
|
||||||
_changedFields.Clear();
|
_changedFields.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ namespace DynamORM.Objects
|
|||||||
/// <returns>Objects enumerator.</returns>
|
/// <returns>Objects enumerator.</returns>
|
||||||
public virtual IEnumerable<T> GetAll()
|
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>
|
/// <summary>Get rows from database by custom query.</summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user