с помощью nhibernate есть ли способ сопоставить свойство readonly в интерфейсе - PullRequest
7 голосов
/ 12 июня 2011

У меня есть интерфейс с именем IEntity, который до сих пор имеет один конкретный класс с именем Entity, этот интерфейс имеет свойство только для чтения.Я бы предпочел отобразить интерфейс, но поскольку интерфейс не может иметь приватное поле, я не могу использовать опцию camelcase field с опцией prefix для его отображения, так что я могу сделать?

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
}

Ответы [ 2 ]

15 голосов
/ 12 июня 2011

Попробуйте:

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

Отображение свойства только для чтения в NHibernate

и, если вы используете Fluent:

Отображение чтениятолько свойство без установщика, использующее Fluent NHibernate

Я думаю, это тоже может быть полезно:

Как отобразить интерфейс в nhibernate?

обновлено

Я думаю, что первый шаг - исправить ваш код.Затем попробуйте опубликовать свой файл сопоставления или свободную конфигурацию.Мы не сможем вам помочь, если неясно, чего вы хотите достичь.

2 голосов
/ 12 июня 2011

Вы отображаете классы в NHibernate, а не интерфейсы.Как уже отмечали другие, вы путаете ключевое слово readonly со свойством только для чтения: ключевое слово readonly означает, что поле может быть установлено только в конструкторе.Свойство только для чтения не имеет или имеет частный установщик.

Но я думаю, что вы можете достичь того, что вы хотите, используя это:

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 использует отражение, поэтому он может установить имясвойство, но оно доступно только для чтения в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...