Public Property CurrentAssembly As Reflection.Assembly
Public Property CurrentAssemblyName As String
Public Property CurrentAssemblyFullName As String
Public Sub New(ByVal asm As Reflection.Assembly)
''Code to set properties.
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf
ResolveAssembly
End Sub
Private Function ResolveAssembly(ByVal sender As Object, ByVal e As
ResolveEventArgs) As Reflection.Assembly
If e.Name = CurrentAssemblyName Or e.Name = CurrentAssemblyFullName
Then
Return CurrentAssembly
End If
End Function
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Regis Dubois
Sent: 10 June 2011 01:46 PM
To: Castle Project Users
Subject: Re: Problem saving an object created dynamically with reflection
you can register assemblies and types after the initializarion:
ActiveRecordStarter.RegisterAssemblies(typeAssembly);
works fine. (I can create a table but can't save the object).
Can you please give me some sample code to see what you've put in the
AssemblyResolve event handler?
On Jun 10, 12:32 pm, Nicholas Kilian <[email protected]>
wrote:
> How is AR/NH meant to know about your type if it's not part of the
> initialisation?
>
> The problem is with NH and how it loads assemblies during
> configuration, which is why you should handle the AssemblyResolve
> event and return your runtime compiled assembly.
>
> -----Original Message-----
> From: [email protected]
>
> [mailto:[email protected]] On Behalf Of Regis
> Dubois
> Sent: 10 June 2011 01:30 PM
> To: Castle Project Users
> Subject: Re: Problem saving an object created dynamically with
> reflection
>
> Hi and thanks Nicholas,
>
> I am not sure I understand the solution you propose?
> Plus the entire purpose of the exercise for me, is to dynamically
> create assembly AFTER the active record initialization and to register
> it after it's been compiled on the fly.
>
> Note that I have tried to explicitly add the class to the solution in
> order to test the following code:
>
> ActiveRecordStarter.RegisterTypes(typeof(iTradeType1));
> iTradeType1 it = new iTradeType1();
> it.Identifier = "DummyId";
> it.Col2 = DateTime.Now;
> it.Save();
>
> and it works.
>
> So it's definitely something to do with AC or NH beeing unhappy with
> the assembly I have compiled. I am trying to check the assembly
> manifest, without much luck.
>
> Any other suggestions are welcomed.
>
> On Jun 10, 11:24 am, Nicholas Kilian <[email protected]>
> wrote:
> > I actually had this same problem the other day, eventually found an
> > obscure reference to the actual error in an NH bug report.
>
> > You need to handle the AppDomain.CurrentDomain.AssemblyResolve event
> > and return your compiled assembly - do this before initialising
> ActiveRecord.
>
> > -----Original Message-----
> > From: [email protected]
>
> > [mailto:[email protected]] On Behalf Of Regis
> > Dubois
> > Sent: 10 June 2011 12:00 PM
> > To: Castle Project Users
> > Subject: Problem saving an object created dynamically with
> > reflection
>
> > Hi, I am trying to get the following to work without much success:
>
> > This class is read from file and compiled in memory:
>
> > using System;
> > using Castle.ActiveRecord;
> > using iTradeStorage.ValueObjects;
> > namespace iTradeStorage.ValueObjects {
> > [ActiveRecord]
> > public class iTradeType1 : ActiveRecordBase
> > {
> > [PrimaryKey]
> > public string Identifier { get; set; }
> > [Property]
> > public String Col1 { get; set; }
> > [Property]
> > public DateTime Col2 { get; set; }
> > }
> > }
>
> > A table existe in the db that matches this class. (created using
> > UpdateSchema())
>
> > I then try to save an object, the following way:
>
> > Type type = _typeManager.GetType(typeVo); //return the
> > type
> > iTradeType1
> > object theObject = Activator.CreateInstance(type);
> > PropertyInfo[] pis = type.GetProperties();
> > Dictionary<string, PropertyInfo> propertyInfosPerName =
> > new Dictionary<string, PropertyInfo>();
> > foreach (PropertyInfo propertyInfo in pis)
> > {
> > //PropertyAttributes pas = propertyInfo.Attributes;
> > propertyInfosPerName.Add(propertyInfo.Name,
> > propertyInfo);
> > }
> > string id = "thisisatest";
> > propertyInfosPerName["Identifier"].SetValue(theObject,
> > id, null);
> > propertyInfosPerName["Col1"].SetValue(theObject,
> > "col1ValTest", null);
> > propertyInfosPerName["Col2"].SetValue(theObject,
> > DateTime.Now, null);
>
> > ((ActiveRecordBase)theObject).Save();
>
> > and get the following exception:
>
> > {"Could not perform Save for iTradeType1"} Inner ex: {"Exception
> > occurred getter of
> > Rbs.Gbm.Sgi.iTradeStorage.ValueObjects.iTradeType1.Identifier"}
> > Innder ex: {"Object does not match target type."}
>
> > at Castle.ActiveRecord.ActiveRecordBase.InternalSave(Object
> > instance, Boolean flush) in c:\TeamCity\buildAgent\work
> > \e41ee5ead2eba140\src\Castle.ActiveRecord\Framework
> > \ActiveRecordBase.cs:line 601
> > at Castle.ActiveRecord.ActiveRecordBase.Save(Object instance) in c:
> > \TeamCity\buildAgent\work\e41ee5ead2eba140\src\Castle.ActiveRecord
> > \Framework\ActiveRecordBase.cs:line 510
> > at Castle.ActiveRecord.ActiveRecordBase.Save() in c:\TeamCity
> > \buildAgent\work\e41ee5ead2eba140\src\Castle.ActiveRecord\Framework
> > \ActiveRecordBase.cs:line 1547
> > at
> > Rbs.Gbm.Sgi.iTradeStorage.ObjectManagement.ObjectManager.StoreObject
> > (S
> > tring
> > objectXml) in
> > C:\Development\Rbs.Gbm.Sgi\iTradeStorage\ObjectManagement
> > \ObjectManager.cs:line 58
> > at ObjectManagementTests.ObjectManagerTests.StoreObjectTest() in C:
> > \Development\Rbs.Gbm.Sgi\iTradeStorage\Tests\ObjectManagementTests
> > \ObjectManagerTests.cs:line 78
>
> > Can somebody kindly help?
>
> > I'd like to try and debug the active record source code but can't
> > seem to find it. Where canI get ahold of it?
>
> > Thanks.
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Castle Project Users" group.
> > To post to this group, send email to
> [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group
> athttp://groups.google.com/group/castle-project-users?hl=en.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Castle Project Users" group.
> To post to this group, send email to
[email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group
athttp://groups.google.com/group/castle-project-users?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.
--
You received this message because you are subscribed to the Google Groups
"Castle Project Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/castle-project-users?hl=en.