Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions Orm/Xtensive.Orm/Orm/Entity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -654,14 +654,6 @@ internal override sealed void SystemGetValue<T>(FieldInfo field, T value)
}
}

internal override sealed void SystemGetValueCompleted<T>(FieldInfo field, T value, Exception exception)
{
Session.SystemEvents.NotifyFieldValueGetCompleted(this, field, value, exception);
using (Session.Operations.EnableSystemOperationRegistration()) {
Session.Events.NotifyFieldValueGetCompleted(this, field, value, exception);
}
}

internal override sealed void SystemSetValueAttempt(FieldInfo field, object value)
{
EnsureNotRemoved();
Expand Down
17 changes: 0 additions & 17 deletions Orm/Xtensive.Orm/Orm/EntityFieldValueGetCompletedEventArgs.cs

This file was deleted.

98 changes: 37 additions & 61 deletions Orm/Xtensive.Orm/Orm/Persistent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,18 +185,10 @@ protected internal T GetFieldValue<T>(FieldInfo field) =>
protected internal T GetNormalizedFieldValue<T>(FieldInfo field)
{
var fieldAccessor = GetNormalizedFieldAccessor<T>(field);
T result = default(T);
try {
SystemBeforeGetValue(field);
result = fieldAccessor.GetValue(this);
SystemGetValue(field, result);
SystemGetValueCompleted(field, result, null);
return result;
}
catch (Exception e) {
SystemGetValueCompleted(field, result, e);
throw;
}
SystemBeforeGetValue(field);
var result = fieldAccessor.GetValue(this);
SystemGetValue(field, result);
return result;
}

/// <summary>
Expand All @@ -211,18 +203,10 @@ protected internal object GetFieldValue(FieldInfo field) =>

private object GetNormalizedFieldValue(FieldInfo field, FieldAccessor fieldAccessor)
{
object result = fieldAccessor.DefaultUntypedValue;
try {
SystemBeforeGetValue(field);
result = fieldAccessor.GetUntypedValue(this);
SystemGetValue(field, result);
SystemGetValueCompleted(field, result, null);
return result;
}
catch (Exception e) {
SystemGetValueCompleted(field, result, e);
throw;
}
SystemBeforeGetValue(field);
var result = fieldAccessor.GetUntypedValue(this);
SystemGetValue(field, result);
return result;
}

/// <summary>
Expand All @@ -240,42 +224,36 @@ private object GetNormalizedFieldValue(FieldInfo field, FieldAccessor fieldAcces
protected internal Key GetReferenceKey(FieldInfo field)
{
Key key = null;
try {
if (field.ReflectedType.IsInterface)
field = TypeInfo.FieldMap[field];
SystemBeforeGetValue(field);
if (!field.IsEntity)
throw new InvalidOperationException(
String.Format(Strings.ExFieldIsNotAnEntityField, field.Name, field.ReflectedType.Name));

var types = Session.Domain.Model.Types;
var type = types[field.ValueType];
var tuple = Tuple;
if (tuple.ContainsEmptyValues(field.MappingInfo))
return null;

int typeIdColumnIndex = type.Key.TypeIdColumnIndex;
var accuracy = TypeReferenceAccuracy.BaseType;
if (typeIdColumnIndex >= 0)
accuracy = TypeReferenceAccuracy.ExactType;
var keyValue = field.ExtractValue(tuple);
if (accuracy == TypeReferenceAccuracy.ExactType) {
int typeId = keyValue.GetValueOrDefault<int>(typeIdColumnIndex);
if (typeId != TypeInfo.NoTypeId) // != default(int) != 0
type = types[typeId];
else
// This may happen if reference is null
accuracy = TypeReferenceAccuracy.BaseType;
}
key = Key.Create(Session.Domain, Session.StorageNodeId, type, accuracy, keyValue);
SystemGetValue(field, key);
SystemGetValueCompleted(field, key, null);
return key;
}
catch (Exception e) {
SystemGetValueCompleted(field, key, e);
throw;
if (field.ReflectedType.IsInterface)
field = TypeInfo.FieldMap[field];
SystemBeforeGetValue(field);
if (!field.IsEntity)
throw new InvalidOperationException(
String.Format(Strings.ExFieldIsNotAnEntityField, field.Name, field.ReflectedType.Name));

var types = Session.Domain.Model.Types;
var type = types[field.ValueType];
var tuple = Tuple;
if (tuple.ContainsEmptyValues(field.MappingInfo))
return null;

int typeIdColumnIndex = type.Key.TypeIdColumnIndex;
var accuracy = TypeReferenceAccuracy.BaseType;
if (typeIdColumnIndex >= 0)
accuracy = TypeReferenceAccuracy.ExactType;
var keyValue = field.ExtractValue(tuple);
if (accuracy == TypeReferenceAccuracy.ExactType) {
int typeId = keyValue.GetValueOrDefault<int>(typeIdColumnIndex);
if (typeId != TypeInfo.NoTypeId) // != default(int) != 0
type = types[typeId];
else
// This may happen if reference is null
accuracy = TypeReferenceAccuracy.BaseType;
}

key = Key.Create(Session.Domain, Session.StorageNodeId, type, accuracy, keyValue);
SystemGetValue(field, key);
return key;
}

protected internal void SetReferenceKey(FieldInfo field, Key value)
Expand Down Expand Up @@ -617,8 +595,6 @@ protected virtual void OnValidate()

internal abstract void SystemGetValue<T>(FieldInfo field, T value);

internal abstract void SystemGetValueCompleted<T>(FieldInfo field, T value, Exception exception);

internal abstract void SystemSetValueAttempt(FieldInfo field, object value);

internal abstract void SystemBeforeSetValue(FieldInfo field, object value);
Expand Down
11 changes: 0 additions & 11 deletions Orm/Xtensive.Orm/Orm/SessionEventAccessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,11 +145,6 @@ public sealed class SessionEventAccessor
/// </summary>
public event EventHandler<EntityFieldValueEventArgs> EntityFieldValueGet;

/// <summary>
/// Occurs when field value reading is completed.
/// </summary>
public event EventHandler<EntityFieldValueGetCompletedEventArgs> EntityFieldValueGetCompleted;

/// <summary>
/// Occurs when is field value is about to be set.
/// This event is raised on any set attempt (even if new value is the same as the current one).
Expand Down Expand Up @@ -411,12 +406,6 @@ internal void NotifyFieldValueGet<T>(Entity entity, FieldInfo field, T value)
EntityFieldValueGet(this, new EntityFieldValueEventArgs(entity, field, value));
}

internal void NotifyFieldValueGetCompleted<T>(Entity entity, FieldInfo field, T value, Exception exception)
{
if (EntityFieldValueGetCompleted!=null && AreNotificationsEnabled())
EntityFieldValueGetCompleted(this, new EntityFieldValueGetCompletedEventArgs(entity, field, value, exception));
}

internal void NotifyFieldValueSettingAttempt(Entity entity, FieldInfo field, object value)
{
if (EntityFieldValueSettingAttempt!=null && AreNotificationsEnabled())
Expand Down
8 changes: 0 additions & 8 deletions Orm/Xtensive.Orm/Orm/Structure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,14 +203,6 @@ internal override sealed void SystemGetValue<T>(FieldInfo field, T value)
Owner.SystemGetValue(ownerField, value);
}

internal override sealed void SystemGetValueCompleted<T>(FieldInfo field, T value, Exception exception)
{
if (Owner == null)
return;
var ownerField = Owner.TypeInfo.StructureFieldMapping[(Field, field)];
Owner.SystemGetValueCompleted(ownerField, value, exception);
}

internal override sealed void SystemSetValueAttempt(FieldInfo field, object value)
{
if (!Session.IsSystemLogicOnly)
Expand Down
Loading