sharp-oodb/mapping/collections/ISetExtendedHandling.cs

57 lines
1.8 KiB
C#

using System;
using System.Reflection;
using System.Xml;
using oodb.attributes;
namespace oodb.mapping.collections
{
public class ISetExtendedHandling : ExtendedFieldHandling
{
public Type ReferencedType { get; }
public FieldInfo ReferencedField { get; protected set; }
public Type ImplementationType { get; }
public ISetExtendedHandling(OODB oodb,FieldInfo fieldInfo)
:base(oodb,fieldInfo)
{
ReferencedType = fieldInfo.FieldType.GetGenericArguments()[0];
ImplementationType = typeof(ISetImplementation<>).MakeGenericType(ReferencedType);
}
public override void Initialize()
{
ReferencedFieldAttribute referencedFieldAttribute = FieldInfo.GetCustomAttribute<ReferencedFieldAttribute>();
string refFieldName = referencedFieldAttribute != null ? referencedFieldAttribute.FieldName : FieldInfo.DeclaringType.Name;
ReferencedField = ReferencedType.GetField(refFieldName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
OODB.StorageAdapter.GetSearchIndex(ReferencedField);
}
public override void Attach(Persistent persistent)
{
object iset = FieldInfo.GetValue(persistent);
if (ImplementationType != iset.GetType())
{
object impl = Activator.CreateInstance(ImplementationType,OODB,FieldInfo,persistent);
FieldInfo.SetValue(persistent, impl);
}
}
public override void Detach(Persistent persistent)
{
}
public override void Load(XmlElement persistenceElement, Persistent persistent)
{
Attach(persistent);
}
public override void Save(XmlElement persistenceElement, Persistent persistent)
{
}
}
}