Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using nhibernate is there any way to map readonly property in interface

Tags:

c#

nhibernate

I have an interface named IEntity which till now has one concrete class named Entity, this interface has a read only property. I'd rather to map the interface,but because an interface cant have a private field,i cant use option camelcase field with prefix option to map it,so what can I do?

public interface IEntity 
{public readonly string Name{get;} }

public class Entity:IEntity
{public readonly string Name{get;}}

public class EntityMap:ClassMap<IEntityMap>
{
  //how to map the readonly property
}
like image 585
Adrakadabra Avatar asked Jun 12 '11 16:06

Adrakadabra


2 Answers

Try:

<property name="Name" type="string" access="readonly"/>

NHibernate Read Only Property Mapping

and if you use Fluent:

Mapping a read-only property with no setter using Fluent NHibernate

I think this can be useful too:

How to map an interface in nhibernate?

updated

I think a first step is correct your code. Then try to post your mapping file or fluent configuration. We cannot help you if it is not clear what you want to achieve.

like image 109
danyolgiax Avatar answered Oct 21 '22 05:10

danyolgiax


You map classes in NHibernate not interfaces. As others have pointed out, you are confusing the readonly keyword with a read-only property: the readonly keyword means that the field can only be set in the constructor. A read-only property has no or a private setter.

But I think you can achieve what you want using this:

public interface IEntity 
{
    string Name { get; } 
}

public class Entity : IEntity
{
    public string Name { get; private set; }
}

public class EntityMap : ClassMap<Entity>
{
    public EntityMap()
    {
        Map(x => x.Name);
    }
}

NHibernate uses reflection so it is able to set the Name property, but it is read-only in your application.

like image 2
Jamie Ide Avatar answered Oct 21 '22 06:10

Jamie Ide