Hi all,

Castle DynamicProxy had one ugly bug related to custom attributes of
properties of proxied class:
http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-78

Seems that has been resolved in Castle, however I have testcase which
fails with Castle proxy factory (pass with LinFu), see testcase below.
I assume it's because NH uses older version of Castle.Core (just my
assumption).
Are there any plans to update Castle libs within NHibernate ?

Thanks

Failing test case(works with LinFu in NH.Tests project, switching to
CastleProxy factory makes test failing):

Domain.cs:
namespace
NHibernate.Test.NHSpecificTest.ProxyPropertyAttributesInheritance
{
    public class MyAttribute : System.Attribute
    {
        public string AttributeValue { get; set; }

        public MyAttribute(string attributeValue)
        {
            AttributeValue = attributeValue;
        }
    }

    public class A
    {
        public virtual int Id { get; set; }

        [MyAttribute("Value1")]
        public virtual string Code { get; set; }
    }
}

Mappings.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
        
namespace="NHibernate.Test.NHSpecificTest.ProxyPropertyAttributesInheritance"
                                   assembly="NHibernate.Test">

  <class name="A" mutable="true"  batch-size="50" dynamic-
update="true" dynamic-insert="true" select-before-update="false"
lazy="true">
    <id name="Id">
      <generator class="native"/>
    </id>
    <property name="Code"/>
  </class>
</hibernate-mapping>

Fixture.cs:

namespace
NHibernate.Test.NHSpecificTest.ProxyPropertyAttributesInheritance
{
    [TestFixture]
    public class Fixture : BugTestCase
    {
        [Test]
        public void Can_Fetch_Property_Custom_Attributes_On_Type()
        {
            var a = new A() { Code = "A1" };
            var attributes = a.GetType().GetProperty
("Code").GetCustomAttributes(true);
            Assert.That(attributes.Length > 0);
        }

        [Test]
        public void
Can_Fetch_Property_Custom_Attributes_On_Proxied_Type()
        {
            using (ISession s = OpenSession())
            using (ITransaction tx = s.BeginTransaction())
            {
                var a = new A { Code = "A1" };
                s.SaveOrUpdate(a);
                tx.Commit();

                Assert.That(a.Id > 0);
            }

            using (ISession s = OpenSession())
            {
                var a = s.Load<A>(1);
                var attributes = a.GetType().GetProperty
("Code").GetCustomAttributes(true);
                Assert.That(attributes.Length > 0);
            }

            using (ISession s = OpenSession())
            using (ITransaction tx = s.BeginTransaction())
            {
                s.Delete("from A");
                tx.Commit();
            }
        }
    }
}

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" 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/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to