He done it... and then he post here too.

On Thu, Jul 29, 2010 at 11:20 AM, Richard Brown (gmail) <
[email protected]> wrote:

> Hi Gabriel,
>
> Can you post this to the NH User's group:
> http://groups.google.com/group/nhusers
>
> Cheers,
>   Richard
>
> --------------------------------------------------
> From: "Gabriel" <[email protected]>
> Sent: Wednesday, July 28, 2010 7:10 AM
> To: "nhibernate-development" <[email protected]>
> Subject: [nhibernate-development] Problem with 'no persister for' exception
> using Nhibernate Fluent Automapping
>
>
>
>> Problem with 'no persister for' exception using Nhibernate Fluent
>> Automapping
>>
>>
>> Hello
>>
>> I'm having some problems with applying NHibernate Fluent Automapping.
>> It worked great in a test project. But now..
>>
>>   Test method
>> [PROJECTNAME].SubscriptionTest.SubscriptionConstructorTest threw
>> exception:  NHibernate.MappingException: No persister for:
>> [PROJECTLIB].SubscriptionManagerRP
>>
>> The class (then again, the same exception arises with a much simpler
>> testclass - so the problem shouldn't be here):
>>
>>
>> --------------------------------------------------------------------------------------------------------------------------
>>
>>
>>   [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml",
>> "2.0.50727.4927")]
>>       [System.Xml.Serialization.XmlTypeAttribute(AnonymousType =
>> true, Namespace = "http://docs.oasis-open.org/wsn/b-2";)]
>>       [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://
>> docs.oasis-open.org/wsn/b-2", IsNullable = false)]
>>       [System.Runtime.Serialization.DataContractAttribute(Name =
>> "SubscriptionManagerRP", Namespace = "http://docs.oasis-open.org/wsn/
>> b-2")]
>>       public class SubscriptionManagerRP
>>       {
>>
>>           private string id;
>>
>>           public string Id
>>           {
>>               get
>>               {
>>                   return id;
>>               }
>>               set
>>               {
>>                   id = value;
>>               }
>>           }
>>
>>           public Boolean Save()
>>           {
>>               DatabaseAccess access = new DatabaseAccess();
>>               var sessionFactory = access.getSessionFactory();
>>
>>               //try
>>               //{
>>                   using (var session = sessionFactory.OpenSession())
>>                   {
>>                       using (var transaction =
>> session.BeginTransaction())
>>                       {
>>
>>
>>                           SaveTextMess(this.ToString());
>>                           session.Save(this);
>>                           transaction.Commit();
>>                           return true;
>>                       }
>>                   }
>>               //}
>>               //catch (Exception e)
>>               //{
>>               //    SaveTextMess("ERROR: " + e);
>>               //    Console.WriteLine(e);
>>               //}
>>
>>               //SaveTextMess("false");
>>               return false;
>>           }
>>
>>           private void SaveTextMess(String output)
>>           {
>>               //Just for Demo purposes, saving text file per message
>> that should be sent
>>
>>               // create a writer and open the file
>>               TextWriter tw = new StreamWriter("C:\\Temp\
>> \CespSubscriptionManagerRPMessage.txt");
>>
>>               // write a line of text to the file
>>               tw.WriteLine(output);
>>
>>               // close the stream
>>               tw.Close();
>>           }
>>
>>   //###################################
>>
>>
>>
>>
>>           [EditorBrowsable(EditorBrowsableState.Never)]
>>           private EndpointReferenceType consumerReferenceField;
>>
>>           [EditorBrowsable(EditorBrowsableState.Never)]
>>           private FilterType filterField;
>>
>>           [EditorBrowsable(EditorBrowsableState.Never)]
>>           private SubscriptionPolicyType subscriptionPolicyField;
>>
>>           [EditorBrowsable(EditorBrowsableState.Never)]
>>           private System.DateTime creationTimeField;
>>
>>           [EditorBrowsable(EditorBrowsableState.Never)]
>>           private bool creationTimeFieldSpecified;
>>
>>           private static System.Xml.Serialization.XmlSerializer
>> serializer;
>>
>>           /// <summary>
>>           /// .ctor class constructor
>>           /// </summary>
>>           public SubscriptionManagerRP()
>>           {
>>               this.subscriptionPolicyField = new
>> SubscriptionPolicyType();
>>               this.filterField = new FilterType();
>>               this.consumerReferenceField = new
>> EndpointReferenceType();
>>           }
>>
>>           [System.Runtime.Serialization.DataMemberAttribute()]
>>           public EndpointReferenceType ConsumerReference
>>           {
>>               get
>>               {
>>                   return this.consumerReferenceField;
>>               }
>>               set
>>               {
>>                   this.consumerReferenceField = value;
>>               }
>>           }
>>
>>           [System.Runtime.Serialization.DataMemberAttribute()]
>>           public FilterType Filter
>>           {
>>               get
>>               {
>>                   return this.filterField;
>>               }
>>               set
>>               {
>>                   this.filterField = value;
>>               }
>>           }
>>
>>           [System.Runtime.Serialization.DataMemberAttribute()]
>>           public SubscriptionPolicyType SubscriptionPolicy
>>           {
>>               get
>>               {
>>                   return this.subscriptionPolicyField;
>>               }
>>               set
>>               {
>>                   this.subscriptionPolicyField = value;
>>               }
>>           }
>>
>>           [System.Runtime.Serialization.DataMemberAttribute()]
>>           public System.DateTime CreationTime
>>           {
>>               get
>>               {
>>                   return this.creationTimeField;
>>               }
>>               set
>>               {
>>                   this.creationTimeField = value;
>>               }
>>           }
>>
>>           [System.Xml.Serialization.XmlIgnoreAttribute()]
>>           [System.Runtime.Serialization.DataMemberAttribute()]
>>           public bool CreationTimeSpecified
>>           {
>>               get
>>               {
>>                   return this.creationTimeFieldSpecified;
>>               }
>>               set
>>               {
>>                   this.creationTimeFieldSpecified = value;
>>               }
>>           }
>>
>>           private static System.Xml.Serialization.XmlSerializer
>> Serializer
>>           {
>>               get
>>               {
>>                   if ((serializer == null))
>>                   {
>>                       serializer = new
>> System.Xml.Serialization.XmlSerializer(typeof(SubscriptionManagerRP));
>>                   }
>>                   return serializer;
>>               }
>>           }
>>
>>           #region Serialize/Deserialize
>>           /// <summary>
>>           /// Serializes current SubscriptionManagerRP object into
>> an XML document
>>           /// </summary>
>>           // <returns>string XML value</returns>
>>           public virtual string WriteObject()
>>           {
>>               System.IO.StreamReader streamReader = null;
>>               System.IO.MemoryStream memoryStream = null;
>>               try
>>               {
>>                   memoryStream = new System.IO.MemoryStream();
>>                   Serializer.Serialize(memoryStream, this);
>>                   memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
>>                   streamReader = new
>> System.IO.StreamReader(memoryStream);
>>                   return streamReader.ReadToEnd();
>>               }
>>               finally
>>               {
>>                   if ((streamReader != null))
>>                   {
>>                       streamReader.Dispose();
>>                   }
>>                   if ((memoryStream != null))
>>                   {
>>                       memoryStream.Dispose();
>>                   }
>>               }
>>           }
>>
>>           /// <summary>
>>           /// Deserializes workflow markup into an
>> SubscriptionManagerRP object
>>           /// </summary>
>>           // <param name="xml">string workflow markup to
>> deserialize</param>
>>           // <param name="obj">Output SubscriptionManagerRP object</
>> param>
>>           // <param name="exception">output Exception value if
>> deserialize failed</param>
>>           // <returns>true if this XmlSerializer can deserialize the
>> object; otherwise, false</returns>
>>           public static bool ReadObject(string xml, out
>> SubscriptionManagerRP obj, out System.Exception exception)
>>           {
>>               exception = null;
>>               obj = default(SubscriptionManagerRP);
>>               try
>>               {
>>                   obj = ReadObject(xml);
>>                   return true;
>>               }
>>               catch (System.Exception ex)
>>               {
>>                   exception = ex;
>>                   return false;
>>               }
>>           }
>>
>>           public static bool ReadObject(string xml, out
>> SubscriptionManagerRP obj)
>>           {
>>               System.Exception exception = null;
>>               return ReadObject(xml, out obj, out exception);
>>           }
>>
>>           public static SubscriptionManagerRP ReadObject(string xml)
>>           {
>>               System.IO.StringReader stringReader = null;
>>               try
>>               {
>>                   stringReader = new System.IO.StringReader(xml);
>>                   return ((SubscriptionManagerRP)
>> (Serializer.Deserialize(System.Xml.XmlReader.Create(stringReader))));
>>               }
>>               finally
>>               {
>>                   if ((stringReader != null))
>>                   {
>>                       stringReader.Dispose();
>>                   }
>>               }
>>           }
>>
>>           /// <summary>
>>           /// Serializes current SubscriptionManagerRP object into
>> file
>>           /// </summary>
>>           // <param name="fileName">full path of outupt xml file</
>> param>
>>           // <param name="exception">output Exception value if
>> failed</param>
>>           // <returns>true if can serialize and save into file;
>> otherwise, false</returns>
>>           public virtual bool SaveToFile(string fileName, out
>> System.Exception exception)
>>           {
>>               exception = null;
>>               try
>>               {
>>                   SaveToFile(fileName);
>>                   return true;
>>               }
>>               catch (System.Exception e)
>>               {
>>                   exception = e;
>>                   return false;
>>               }
>>           }
>>
>>           public virtual void SaveToFile(string fileName)
>>           {
>>               System.IO.StreamWriter streamWriter = null;
>>               try
>>               {
>>                   string xmlString = WriteObject();
>>                   System.IO.FileInfo xmlFile = new
>> System.IO.FileInfo(fileName);
>>                   streamWriter = xmlFile.CreateText();
>>                   streamWriter.WriteLine(xmlString);
>>                   streamWriter.Close();
>>               }
>>               finally
>>               {
>>                   if ((streamWriter != null))
>>                   {
>>                       streamWriter.Dispose();
>>                   }
>>               }
>>           }
>>
>>           /// <summary>
>>           /// Deserializes workflow markup from file into an
>> SubscriptionManagerRP object
>>           /// </summary>
>>           // <param name="xml">string workflow markup to
>> deserialize</param>
>>           // <param name="obj">Output SubscriptionManagerRP object</
>> param>
>>           // <param name="exception">output Exception value if
>> deserialize failed</param>
>>           // <returns>true if this XmlSerializer can deserialize the
>> object; otherwise, false</returns>
>>           public static bool LoadFromFile(string fileName, out
>> SubscriptionManagerRP obj, out System.Exception exception)
>>           {
>>               exception = null;
>>               obj = default(SubscriptionManagerRP);
>>               try
>>               {
>>                   obj = LoadFromFile(fileName);
>>                   return true;
>>               }
>>               catch (System.Exception ex)
>>               {
>>                   exception = ex;
>>                   return false;
>>               }
>>           }
>>
>>           public static bool LoadFromFile(string fileName, out
>> SubscriptionManagerRP obj)
>>           {
>>               System.Exception exception = null;
>>               return LoadFromFile(fileName, out obj, out exception);
>>           }
>>
>>           public static SubscriptionManagerRP LoadFromFile(string
>> fileName)
>>           {
>>               System.IO.FileStream file = null;
>>               System.IO.StreamReader sr = null;
>>               try
>>               {
>>                   file = new System.IO.FileStream(fileName,
>> FileMode.Open, FileAccess.Read);
>>                   sr = new System.IO.StreamReader(file);
>>                   string xmlString = sr.ReadToEnd();
>>                   sr.Close();
>>                   file.Close();
>>                   return ReadObject(xmlString);
>>               }
>>               finally
>>               {
>>                   if ((file != null))
>>                   {
>>                       file.Dispose();
>>                   }
>>                   if ((sr != null))
>>                   {
>>                       sr.Dispose();
>>                   }
>>               }
>>           }
>>           #endregion
>>
>>           #region Clone method
>>           /// <summary>
>>           /// Create a clone of this SubscriptionManagerRP object
>>           /// </summary>
>>           public virtual SubscriptionManagerRP Clone()
>>           {
>>               return ((SubscriptionManagerRP)
>> (this.MemberwiseClone()));
>>           }
>>           #endregion
>>       }
>>
>> ------------------------------------------------------------------------------------------------------
>>
>>
>> The save method from the class above (looks the same in the simple
>> testclass that works in the test project):
>>
>>
>> ------------------------------------------------------------------------------------------------------
>>    public Boolean Save()
>>           {
>>               DatabaseAccess access = new DatabaseAccess();
>>               var sessionFactory = access.getSessionFactory();
>>
>>               //try
>>               //{
>>                   using (var session = sessionFactory.OpenSession())
>>                   {
>>                       using (var transaction =
>> session.BeginTransaction())
>>                       {
>>
>>
>>                           SaveTextMess(this.ToString());
>>                           session.Save(this);
>>                           transaction.Commit();
>>                           return true;
>>                       }
>>                   }
>>               //}
>>               //catch (Exception e)
>>               //{
>>               //    SaveTextMess("ERROR: " + e);
>>               //    Console.WriteLine(e);
>>               //}
>>
>>               //SaveTextMess("false");
>>               return false;
>>           }
>>
>> ------------------------------------------------------------------------------------------------------
>>
>> Where I set the connection string and the Session Factory:
>>
>>
>> ------------------------------------------------------------------------------------------------------
>>    class SessionFactoryController
>>       {
>>
>>           public SessionFactoryController()
>>           {
>>
>>           }
>>
>>           public ISessionFactory GiveFactory()
>>           {
>>               return CreateSessionFactory();
>>           }
>>
>>           private static void ReferByteCode(){
>>
>>               //Just to make sure the ByteCodeCastle is loaded
>>               ProxyFactory fake = new ProxyFactory();
>>           }
>>
>>           private static ISessionFactory CreateSessionFactory()
>>           {
>>               ReferByteCode();
>>
>>               var cfg = new FluentNhibernateConfiguration();
>>
>>               return Fluently.Configure()
>>                 .Database(
>>
>> FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005
>>                       .ConnectionString("[SERVER];Database=Pets;User
>> ID=NHibernateTester;Password=[PASSWORD];Trusted_Connection=False;")
>>                 )
>>
>>                 .Mappings(m =>
>>                     m.AutoMappings
>>
>> .Add(AutoMap.AssemblyOf<SubscriptionManagerRP>(cfg))
>>                   )
>>
>>                 .BuildSessionFactory();
>>           }
>>
>>       }
>>
>> ------------------------------------------------------------------------------------------------------
>>
>> Config:
>>
>>
>> ------------------------------------------------------------------------------------------------------
>>   class FluentNhibernateConfiguration :
>> DefaultAutomappingConfiguration
>>       {
>>           public override bool ShouldMap(Type type)
>>           {
>>               return type.Namespace == "System.Xml.XmlAttribute";
>>           }
>>       }
>>
>> ------------------------------------------------------------------------------------------------------
>>
>> The config is to handle an earlier mapping exception for
>> 'System.Xml.XmlAttribute'.
>>
>> Is it possible to get this error if the database isn't set up
>> correctly? I have done the test that with a class I know works with
>> NHibernate Automapping (from another project) test towards the
>> database (same as in the other project). And I still get the same
>> exception, but for the 'simple' class.
>>
>> So it isn't the class.
>>
>> It isn't the connection string, because it was copied from the other
>> project that works great.
>>
>> It isn't the settings (or at least the security/access settings) on
>> the database. I assume it should give another error if I configured
>> the tables wrong, and as mentioned, I get the same exception when I
>> direct it towards something that works in another project.
>>
>> I have deleted everything and rewritten it once, just to make sure I
>> didn't do some small silly misstake. If so, I've done it twice.
>>
>> As mentioned, and as you see. **This code is very, very simple.** The
>> only thing that is complex is the class. And even if I change it for a
>> very, very simple class I get the same exception.
>>
>> Any ideas please? What does the 'no persister' exception actually
>> include?
>>
>>
>>
>>
>>


-- 
Fabio Maulo

Reply via email to