/// <summary> /// Sets each <seealso cref="PropertyInfo"/> of the <paramref name="dbObject"/> to the value of /// the <paramref name="record"/>, so long as the <seealso cref="PropertyInfo"/> is not the /// primary key of the <paramref name="dbObject"/>. /// </summary> /// <typeparam name="T">Type of <seealso cref="DBObject"/></typeparam> /// <param name="dbObject"><seealso cref="DBObject"/> to set <seealso cref="PropertyInfo"/> values for.</param> /// <param name="record"><seealso cref="DbDataRecord"/> to read values from.</param> private static void SetPropertyValuesFromRecord <T>(ref T dbObject, DbDataRecord record) where T : DBObject { for (int i = 0; i < record.FieldCount; i++) { if (record.GetName(i) != dbObject.PrimaryKeyPropertyInfo.Name) { dbObject.GetType().GetProperty(record.GetName(i)).SetValue(dbObject, record.GetValue(i)); } } }
/// <summary>Audit entity deleted.</summary> /// <param name="entry">The entry.</param> /// <param name="record">The record.</param> /// <param name="prefix">The prefix.</param> public static void AuditEntityDeleted(AuditEntry entry, ObjectStateEntry objectStateEntry, DbDataRecord record, string prefix = "") { for (var i = 0; i < record.FieldCount; i++) { var name = record.GetName(i); var value = record.GetValue(i); if (entry.Parent.Configuration.UseNullForDBNullValue && value == DBNull.Value) { value = null; } var valueRecord = value as DbDataRecord; if (valueRecord != null) { // Complex Type AuditEntityDeleted(entry, objectStateEntry, valueRecord, string.Concat(prefix, name, ".")); } else if (objectStateEntry.EntityKey.EntityKeyValues.Any(x => x.Key == name) || entry.Parent.CurrentOrDefaultConfiguration.IsAuditedProperty(entry.Entry, string.Concat(prefix, name))) { var auditEntryProperty = entry.Parent.Configuration.AuditEntryPropertyFactory != null? entry.Parent.Configuration.AuditEntryPropertyFactory(new AuditEntryPropertyArgs(entry, objectStateEntry, string.Concat(prefix, name), value, null)) : new AuditEntryProperty(); auditEntryProperty.IsKey = objectStateEntry.EntitySet.ElementType.KeyMembers.Any(x => x.Name == name); auditEntryProperty.Build(entry, string.Concat(prefix, name), value, null); entry.Properties.Add(auditEntryProperty); } } }
/// <summary>Audit entity modified.</summary> /// <param name="audit">The audit to use to add changes made to the context.</param> /// <param name="entry">The entry.</param> /// <param name="objectStateEntry">The object state entry.</param> /// <param name="orginalRecord">The orginal record.</param> /// <param name="currentRecord">The current record.</param> /// <param name="prefix">The prefix.</param> public static void AuditEntityModified(Audit audit, AuditEntry entry, ObjectStateEntry objectStateEntry, DbDataRecord orginalRecord, DbUpdatableDataRecord currentRecord, string prefix = "") { for (var i = 0; i < orginalRecord.FieldCount; i++) { var name = orginalRecord.GetName(i); var originalValue = orginalRecord.GetValue(i); var currentValue = currentRecord.GetValue(i); var valueRecord = originalValue as DbDataRecord; if (valueRecord != null) { // Complex Type AuditEntityModified(audit, entry, objectStateEntry, valueRecord, currentValue as DbUpdatableDataRecord, string.Concat(prefix, name, ".")); } else if (objectStateEntry.EntityKey.EntityKeyValues.Any(x => x.Key == name) || entry.Parent.CurrentOrDefaultConfiguration.IsAuditedProperty(entry.Entry, name)) { if (!audit.Configuration.IgnorePropertyUnchanged || objectStateEntry.EntityKey.EntityKeyValues.Any(x => x.Key == name) || !Equals(currentValue, originalValue)) { var auditEntryProperty = entry.Parent.Configuration.AuditEntryPropertyFactory != null? entry.Parent.Configuration.AuditEntryPropertyFactory(new AuditEntryPropertyArgs(entry, objectStateEntry, string.Concat(prefix, name), originalValue, currentValue)) : new AuditEntryProperty(); auditEntryProperty.Build(entry, string.Concat(prefix, name), originalValue, currentValue); entry.Properties.Add(auditEntryProperty); } } } }
private static IEnumerable <string> GetColumnNames(DbDataRecord record) { // Get all of the column names for this query for (int i = 0; i < record.FieldCount; i++) { yield return(record.GetName(i)); } }
static void TestProduct(string esqlQuery, Dictionary <string, object> parametes) { using (EntityConnection conn = new EntityConnection("name=AdventureWorksEntities")) { conn.Open(); try { // Create an EntityCommand. using (EntityCommand cmd = conn.CreateCommand()) { cmd.CommandText = esqlQuery; foreach (KeyValuePair <string, object> kvp in parametes) { cmd.Parameters.AddWithValue(kvp.Key, kvp.Value); } // Execute the command. using (EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { // The result returned by this query contains // Address complex Types. while (rdr.Read()) { int col = rdr.FieldCount; if (rdr.FieldCount > 3) { col = 3; } for (int i = 0; i < col; i++) { Console.Write("{0} ", rdr[i]); } Console.WriteLine(); if (rdr.Depth > 0) { // Display Address information. DbDataRecord nestedRecord = rdr[0] as DbDataRecord; for (int i = 0; i < nestedRecord.FieldCount; i++) { Console.WriteLine(" " + nestedRecord.GetName(i) + ": " + nestedRecord.GetValue(i)); } } } } } } catch (EntityException ex) { Console.WriteLine(ex.ToString()); } conn.Close(); } }
/// <summary> /// Sets the primary key of a <seealso cref="DBObject"/> using the specified <paramref name="record"/>. /// </summary> /// <param name="record"><seealso cref="DbDataRecord"/> to get the primary key from.</param> internal void SetPrimaryKey(DbDataRecord record) { for (int i = 0; i < record.FieldCount; i++) { if (record.GetName(i) == PrimaryKeyPropertyInfo.Name) { SetPrimaryKey((int)record.GetValue(i)); } } }
static private void ComplexTypeWithEntityCommand() { //<snippetComplexTypeWithEntityCommand> using (EntityConnection conn = new EntityConnection("name=CustomerComplexAddrContext")) { conn.Open(); // Create a query that returns Address complex type. string esqlQuery = @"SELECT VALUE customers FROM CustomerComplexAddrContext.CCustomers AS customers WHERE customers.CustomerId < 3"; try { // Create an EntityCommand. using (EntityCommand cmd = conn.CreateCommand()) { cmd.CommandText = esqlQuery; // Execute the command. using (EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { // The result returned by this query contains // Address complex Types. while (rdr.Read()) { // Display CustomerID Console.WriteLine("Customer ID: {0}", rdr["CustomerId"]); // Display Address information. DbDataRecord nestedRecord = rdr["Address"] as DbDataRecord; Console.WriteLine("Address:"); for (int i = 0; i < nestedRecord.FieldCount; i++) { Console.WriteLine(" " + nestedRecord.GetName(i) + ": " + nestedRecord.GetValue(i)); } } } } } catch (EntityException ex) { Console.WriteLine(ex.ToString()); } conn.Close(); } //</snippetComplexTypeWithEntityCommand> }
/// <summary> /// Converts a single DbDataRecord object into something else. /// The destination type must have a default constructor. /// </summary> /// <typeparam name = "T"></typeparam> /// <param name = "record"></param> /// <returns></returns> public static T ConvertTo <T>(this DbDataRecord record) where T : new() { var item = new T(); for (int f = 0; f < record.FieldCount; f++) { var p = item.GetType().GetProperty(record.GetName(f)); if (p != null && p.PropertyType == record.GetFieldType(f)) { p.SetValue(item, record.GetValue(f), null); } } return(item); }
static public void ComplexTypeWithEntityCommand() { //<snippetComplexTypeWithEntityCommand> using (EntityConnection conn = new EntityConnection("name=AdventureWorksEntities")) { conn.Open(); string esqlQuery = @"SELECT VALUE contacts FROM AdventureWorksEntities.Contacts AS contacts WHERE contacts.ContactID == @id"; // Create an EntityCommand. using (EntityCommand cmd = conn.CreateCommand()) { cmd.CommandText = esqlQuery; EntityParameter param = new EntityParameter(); param.ParameterName = "id"; param.Value = 3; cmd.Parameters.Add(param); // Execute the command. using (EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { // The result returned by this query contains // Address complex Types. while (rdr.Read()) { // Display CustomerID Console.WriteLine("Contact ID: {0}", rdr["ContactID"]); // Display Address information. DbDataRecord nestedRecord = rdr["EmailPhoneComplexProperty"] as DbDataRecord; Console.WriteLine("Email and Phone Info:"); for (int i = 0; i < nestedRecord.FieldCount; i++) { Console.WriteLine(" " + nestedRecord.GetName(i) + ": " + nestedRecord.GetValue(i)); } } } } conn.Close(); } //</snippetComplexTypeWithEntityCommand> }
private void DrawComplexType(TreeNode node, DbDataRecord originalValues, DbDataRecord currentValues) { for (int i = 0; i < originalValues.FieldCount; i++) { TreeNode childNode = new TreeNode(CreateNodeText(originalValues.GetName(i), false)); node.Nodes.Add(childNode); if (_entry.OriginalValues[i] is DbDataRecord) { DrawComplexType(childNode, originalValues[i] as DbDataRecord, currentValues[i] as DbDataRecord); } else { DrawProperty(childNode, originalValues[i], currentValues[i]); } } }
/// <summary>Audit entity deleted.</summary> /// <param name="entry">The entry.</param> /// <param name="record">The record.</param> /// <param name="prefix">The prefix.</param> public static void AuditEntityDeleted(AuditEntry entry, DbDataRecord record, string prefix = "") { for (var i = 0; i < record.FieldCount; i++) { var name = record.GetName(i); var value = record.GetValue(i); var valueRecord = value as DbDataRecord; if (valueRecord != null) { // Complex Type AuditEntityDeleted(entry, valueRecord, string.Concat(prefix, name, ".")); } else if (entry.Parent.CurrentOrDefaultConfiguration.IsAuditedProperty(entry.Entry, name)) { entry.Properties.Add(new AuditEntryProperty(entry, string.Concat(prefix, name), value, null)); } } }
internal IEnumerator <T> ExecuteReader <T>(string sql) { Type TypeT = typeof(T); ConstructorInfo ctor = TypeT.GetConstructor(Type.EmptyTypes); if (ctor == null) { throw new InvalidOperationException($"Type {TypeT.Name} does not have a default constructor."); } _sqlConnection.Open(); IEnumerator data = new SqlCommand(sql, _sqlConnection).ExecuteReader().GetEnumerator(); while (data.MoveNext()) { T newInst = (T)ctor.Invoke(null); DbDataRecord record = (DbDataRecord)data.Current; int fieldCount = Properties.GetFieldCount((DbDataRecord)data.Current); for (int i = 0; i < fieldCount; i++) { string propertyName = record.GetName(i); PropertyInfo propertyInfo = TypeT.GetProperty(propertyName); if (propertyInfo != null) { object value = record[i]; if (value == DBNull.Value) { propertyInfo.SetValue(newInst, null); } else { propertyInfo.SetValue(newInst, value); } } } yield return(newInst); } }
public static void AuditEntityModified(Audit audit, AuditEntry entry, DbDataRecord orginalRecord, DbUpdatableDataRecord currentRecord, string prefix = "") { for (var i = 0; i < orginalRecord.FieldCount; i++) { var name = orginalRecord.GetName(i); var originalValue = orginalRecord.GetValue(i); var currentValue = currentRecord.GetValue(i); var valueRecord = originalValue as DbDataRecord; if (valueRecord != null) { // Complex Type AuditEntityModified(audit, entry, valueRecord, currentValue as DbUpdatableDataRecord, string.Concat(prefix, name, ".")); } else { if (audit.Configuration.IncludePropertyUnchanged || !Equals(currentValue, originalValue)) { entry.Properties.Add(new AuditEntryProperty(string.Concat(prefix, name), originalValue, currentValue)); } } } }
/// <summary> /// Map used to specify the type for more dynamic code. /// </summary> /// <param name="idr">DbDataRecord from DbDataReader</param> /// <param name="type">Type of the object to be returned</param> /// <returns>Returns instance of the specified type populated from the database.</returns> internal static object Map(DbDataRecord idr, Type type) { object result = Activator.CreateInstance(type); if (result == null) { throw new Exception(@"Unable to materialize the specified type."); } string[] columNames = new string[idr.FieldCount]; for (int col = 0; col < idr.FieldCount; col++) { if (idr.IsDBNull(col)) { continue; /* Only map the columns that have values */ } columNames[col] = idr.GetName(col).ToLower(); } /* Use the extender to get the relevant properties */ ConcurrentBag <PropertyMap> mappings = new(result.GetMappings(columNames)); if (mappings.Count <= 0) { return(null); } foreach (PropertyMap pm in mappings) { PropertyInfo pi = pm.Key; Column col = pm.Value; string name = string.Equals(col.Name, pi.Name, StringComparison.CurrentCultureIgnoreCase) ? pi.Name : col.Name; Type nullable = Nullable.GetUnderlyingType(pi.PropertyType); if (idr[name] == DBNull.Value) { continue; } object value = idr[name]; if (nullable != null) { if (col.DataType == typeof(char?)) { if (ReferenceEquals(value, "")) { continue; } } pi.SetValue(result, Convert.ChangeType(value, nullable), null); continue; /* Step to the next property */ } if (pi.PropertyType.IsEnum) { pi.SetValue(result, Enum.ToObject(pi.PropertyType, value)); continue; } pi.SetValue(result, Convert.ChangeType(value, pi.PropertyType)); } return(result); }
public static StringCollection GetEnumerationItemFiledNames(object item, string fieldToExclude) { StringCollection stringCollection = new StringCollection(); if (item is DataRow) { foreach (DataColumn column in ((DataRow)item).Table.Columns) { if (column.ColumnName != fieldToExclude) { stringCollection.Add(column.ColumnName); } } return(stringCollection); } if (item is DataRowView) { foreach (DataColumn column2 in ((DataRowView)item).DataView.Table.Columns) { if (column2.ColumnName != fieldToExclude) { stringCollection.Add(column2.ColumnName); } } return(stringCollection); } if (item is DbDataRecord) { DbDataRecord dbDataRecord = (DbDataRecord)item; for (int i = 0; i < dbDataRecord.FieldCount; i++) { string name = dbDataRecord.GetName(i); if (name != fieldToExclude) { stringCollection.Add(name); } } } else if (item != null) { PropertyInfo[] properties = item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); if (properties != null) { PropertyInfo[] array = properties; foreach (PropertyInfo propertyInfo in array) { if (propertyInfo.Name != fieldToExclude) { stringCollection.Add(propertyInfo.Name); } } } FieldInfo[] fields = item.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public); if (fields != null) { FieldInfo[] array2 = fields; foreach (FieldInfo fieldInfo in array2) { if (fieldInfo.Name != fieldToExclude) { stringCollection.Add(fieldInfo.Name); } } } } return(stringCollection); }
public void Write(object o) { if (o == null) { Write("null"); } else if (o is DateTime) { Write("{"); Write(((DateTime)o).ToShortDateString()); Write("}"); } else if (o is ValueType) { Write(o.ToString()); } else if (o is Type) { Write(((Type)o).Name); } else if (o is Exception) { Write("EXCEPTION: " + o.ToString()); } else if (o is byte[]) { byte[] arr = (byte[])o; int length = Math.Min(arr.Length, 32); string t = "Byte[" + arr.Length + "] = " + BitConverter.ToString(arr, 0, length) + ((length != arr.Length) ? "..." : ""); Write(t); } else if (o is string) { Write("\""); Write(o as string); Write("\""); } else { if (o is ObjectCollectionCache) { Write(((ObjectCollectionCache)o).OriginalType); } else { Write(o.GetType()); } Write(" "); if (ancestors.Contains(o) || (Level > depth + 1)) { Write("{...}"); } else { ancestors.Push(o); if (o is IEnumerable) { var members = from object element in (o as IEnumerable) select new Member { Name = null, Value = element }; Write(members); } else if (o is DbDataRecord) { DbDataRecord rec = o as DbDataRecord; var members = from element in Enumerable.Range(0, rec.FieldCount) select new Member { Name = rec.GetName(element), Value = rec.IsDBNull(element) ? null : rec.GetValue(element) }; Write(members); } else { var members = from element in o.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance) let p = element as PropertyInfo let f = element as FieldInfo where p != null || f != null && !element.Name.StartsWith("_") select new Member { Name = element.Name, Value = p != null?p.GetValue(o, null) : f.GetValue(o) }; Write(members); } } } }
public void Write(object o) { if (o == null) { Write("null"); } else if (o == _omittedValue) { Write("{...}"); } else if (o is DateTime) { Write("{"); Write(((DateTime)o).ToString()); Write("}"); } else if (o is ValueType) { Write(o.ToString()); } else if (o is Type) { Write(((Type)o).Name); } else if (o is Exception) { Write("EXCEPTION: " + o.ToString()); } else if (o is byte[]) { byte[] arr = (byte[])o; int length = Math.Min(arr.Length, 32); string t = "Byte[" + arr.Length + "] = " + BitConverter.ToString(arr, 0, length) + ((length != arr.Length) ? "..." : ""); Write(t); } else if (o is string) { Write("\""); Write(o as string); Write("\""); } else { if (o is ObjectCollectionCache) { Write(((ObjectCollectionCache)o).OriginalType); } else { Write(o.GetType()); } Write(" "); if (_ancestors.Contains(o) || (Level > _maximumDepth + 1)) { Write("{...}"); } else { _ancestors.Push(o); if (o is IEnumerable) { var members = from object element in (o as IEnumerable) select new Member { Name = null, Value = element }; Write(members); } else if (o is DbDataRecord) { DbDataRecord rec = o as DbDataRecord; var members = from element in Enumerable.Range(0, rec.FieldCount) select new Member { Name = rec.GetName(element), Value = rec.IsDBNull(element) ? null : rec.GetValue(element) }; Write(members); } else { var members = from element in o.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance) let p = element as PropertyInfo let f = element as FieldInfo where p != null || f != null select new Member { Name = element.Name, Value = p != null?p.GetValue(o, null) : f.GetValue(o) }; // remove members which cause explosion of the tree if (o is EntityReference) { members = members.Select(c => new Member { Name = c.Name, Value = (c.Name == "RelationshipSet" ? _omittedValue : c.Value) }); } Write(members); } } } }
public TreeNode GetTreeNode(object o) { if (o == null) { return(GetNullNode()); } if (o is Exception) { return(GetExceptionNode((Exception)o)); } if (o is DateTime) { return(GetDateTimeNode((DateTime)o)); } if (o is String) { return(GetStringNode((string)o)); } if (o is Type) { return(GetTypeNode((Type)o)); } if (o is byte[]) { return(GetByteArrayNode((byte[])o)); } if (o is ValueType) { return(GetValueTypeNode(o)); } if (_ancestors.Contains(o) || _level >= _maxLoadDepth) { return(new TreeNode("{ ... }")); } TreeNode parentNode = new TreeNode(GetNiceTypeName(o.GetType())); if (o is ObjectCollectionCache) { parentNode.Text = GetNiceTypeName(((ObjectCollectionCache)o).OriginalType); } _ancestors.Push(o); int oldLevel = _level; _level++; if (o is IEnumerable) { parentNode.SelectedImageIndex = parentNode.ImageIndex = 4; var members = (from object element in (o as IEnumerable) select new Member { Name = null, Value = element }).ToList(); AttachChildren(parentNode, members);; parentNode.Text += " (" + members.Count + " item" + (members.Count != 1 ? "s" : "") + ")"; } else if (o is DbDataRecord) { parentNode.SelectedImageIndex = parentNode.ImageIndex = 2; DbDataRecord rec = o as DbDataRecord; var members = from element in Enumerable.Range(0, rec.FieldCount) select new Member { Name = rec.GetName(element), Value = rec.IsDBNull(element) ? null : rec.GetValue(element) }; AttachChildren(parentNode, members);; } else { parentNode.SelectedImageIndex = parentNode.ImageIndex = 1; var members = from element in o.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance) let p = element as PropertyInfo let f = element as FieldInfo where p != null || f != null && !element.Name.StartsWith("_") select new Member { Name = element.Name, Value = p != null?p.GetValue(o, null) : f.GetValue(o) }; AttachChildren(parentNode, members);; IEntityWithKey ewk = o as IEntityWithKey; if (ewk != null) { StringBuilder sb = new StringBuilder(parentNode.Text.Length + 20); sb.Append(parentNode.Text); sb.Append("("); for (int i = 0; i < ewk.EntityKey.EntityKeyValues.Length; ++i) { if (i > 0) { sb.Append(", "); } sb.Append(ewk.EntityKey.EntityKeyValues[i].Key); sb.Append("="); sb.Append(ewk.EntityKey.EntityKeyValues[i].Value); } sb.Append(")"); parentNode.Text = sb.ToString(); } } if (_level <= _expandDepth) { parentNode.Expand(); } _ancestors.Pop(); _level = oldLevel; return(parentNode); }
public TreeNode GetTreeNode(object o) { if (o == null) { return(GetNullNode()); } if (o == _omittedValue) { return(new TreeNode("{ ... }")); } if (o is Exception) { return(GetExceptionNode((Exception)o)); } if (o is DateTime) { return(GetDateTimeNode((DateTime)o)); } if (o is String) { return(GetStringNode((string)o)); } if (o is Type) { return(GetTypeNode((Type)o)); } if (o is byte[]) { return(GetByteArrayNode((byte[])o)); } if (o is ValueType) { return(GetValueTypeNode(o)); } if (_ancestors.Contains(o) || _level >= _maxLoadDepth) { return(new TreeNode("{ ... }")); } TreeNode parentNode = new TreeNode(GetNiceTypeName(o.GetType())); if (o is ObjectCollectionCache) { parentNode.Text = GetNiceTypeName(((ObjectCollectionCache)o).OriginalType); } _ancestors.Push(o); int oldLevel = _level; _level++; if (o is IEnumerable) { parentNode.SelectedImageIndex = parentNode.ImageIndex = 4; var members = (from object element in (o as IEnumerable) select new Member { Name = null, Value = element }).ToList(); AttachChildren(parentNode, members);; parentNode.Text += " (" + members.Count + " item" + (members.Count != 1 ? "s" : "") + ")"; } else if (o is DbDataRecord) { parentNode.SelectedImageIndex = parentNode.ImageIndex = 2; DbDataRecord rec = o as DbDataRecord; var members = from element in Enumerable.Range(0, rec.FieldCount) select new Member { Name = rec.GetName(element), Value = rec.IsDBNull(element) ? null : rec.GetValue(element) }; AttachChildren(parentNode, members);; } else { parentNode.SelectedImageIndex = parentNode.ImageIndex = 1; var members = from element in o.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance) let p = element as PropertyInfo let f = element as FieldInfo where p != null || f != null select new Member { Name = element.Name, Value = p != null?p.GetValue(o, null) : f.GetValue(o) }; // replace members who would lead to tree explosion with _omittedValue // which emits { ... } if (o is EntityReference) { members = members.Select(c => new Member { Name = c.Name, Value = (c.Name == "RelationshipSet" ? _omittedValue : c.Value) }); } AttachChildren(parentNode, members);; IEntityWithKey ewk = o as IEntityWithKey; if (ewk != null) { parentNode.Text += " { " + GetEntityKeyText(ewk.EntityKey) + " }"; } } if (_level <= _expandDepth) { parentNode.Expand(); } _ancestors.Pop(); _level = oldLevel; return(parentNode); }