我有一个名为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
}
答案 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();
}
}