使用nhibernate是否有任何方法可以在接口中映射readonly属性

时间:2011-06-12 16:17:11

标签: c# nhibernate

我有一个名为IEntity的接口,到目前为止有一个名为Entity的具体类,这个接口有一个只读属性。我宁愿映射接口,但由于接口不能有私有字段,我不能使用带有前缀选项的选项camelcase字段来映射它,所以我该怎么办?

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
}

3 个答案:

答案 0 :(得分:15)

尝试:

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

NHibernate Read Only Property Mapping

如果您使用Fluent:

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

我认为这也很有用:

How to map an interface in nhibernate?

<强>更新

我认为第一步是纠正您的代码。然后尝试发布您的映射文件或流畅的配置。如果不清楚你想要达到什么目标,我们无法帮助你。

答案 1 :(得分:2)

您在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使用反射,因此它可以设置Name属性,但它在您的应用程序中是只读的。

答案 2 :(得分:0)

您可以在ReadOnly配置中设置ClassMap属性。

public interface IEntity 
{
    string Name { get; } 
}

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

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