C# nHibernate类中的条件getter
我可以有这样一个条件getter:C# nHibernate类中的条件getter,c#,nhibernate,getter,C#,Nhibernate,Getter,我可以有这样一个条件getter: protected District _district; public virtual District District { get { return _district ?? this.Zone; } set { _district = value; } } 我需要检查一个属性是否为null,如果它的null返回同一类的另一个属性 这是一个nHibernate映射类 当我尝试这样做时,服务器只是挂断了…您已经递归地定义了属性(gett
protected District _district;
public virtual District District
{
get { return _district ?? this.Zone; }
set { _district = value; }
}
我需要检查一个属性是否为null,如果它的null返回同一类的另一个属性
这是一个nHibernate映射类
当我尝试这样做时,服务器只是挂断了…您已经递归地定义了属性(getter和setter实际上都调用自己)。您需要使用一个内部字段来存储实际值:
private District district;
public virtual District District
{
get
{
return this.district ?? this.Zone;
}
set
{
this.district = value;
}
}
您已经递归地定义了属性(getter和setter实际上都调用自己)。您需要使用一个内部字段来存储实际值:
private District district;
public virtual District District
{
get
{
return this.district ?? this.Zone;
}
set
{
this.district = value;
}
}
在NHibernate映射的情况下,我不会向映射属性添加任何逻辑。在这种情况下,我将添加一个独特的方法:
public virtual District District { get; set; }
public virtual District GetDistrictOrDefault()
{
return District ?? this.Zone;
}
或者,您可能希望保护映射的District属性-您可以提供第二个属性来包装受保护的属性,并提供一些逻辑:
// Mapped with NHibernate
protected virtual District District { get; set; }
public virtual District DistrictOrDefault // You might find a better naming...
{
get
{
return District ?? this.Zone;
}
set
{
District = value;
}
}
在NHibernate映射的情况下,我不会向映射属性添加任何逻辑。在这种情况下,我将添加一个独特的方法:
public virtual District District { get; set; }
public virtual District GetDistrictOrDefault()
{
return District ?? this.Zone;
}
或者,您可能希望保护映射的District属性-您可以提供第二个属性来包装受保护的属性,并提供一些逻辑:
// Mapped with NHibernate
protected virtual District District { get; set; }
public virtual District DistrictOrDefault // You might find a better naming...
{
get
{
return District ?? this.Zone;
}
set
{
District = value;
}
}
这样做是可能的,而且非常简单。NHibernate允许我们为单个属性指定访问策略。我经常使用这样的东西:
protected District _district;
public virtual District District
{
get { return _district ?? this.Zone; }
set { _district = value; }
}
和属性的映射:
<property name="District" access="field.camelcase-underscore" />
在这个映射方案中,您的代码将使用属性来获取/设置数据,而NHibernate使用字段来执行相同的操作。如果您省略了访问设置,如果property District确实为NULL,NHibernate将认为您已将property District更改为新值,它将尝试更新相应的数据库记录。这可能会导致错误。
我从来没有使用过Fluent NHibernate,所以我不知道如何使用Fluent做到这一点。这是可能的,而且非常简单。NHibernate允许我们为单个属性指定访问策略。我经常使用这样的东西:
protected District _district;
public virtual District District
{
get { return _district ?? this.Zone; }
set { _district = value; }
}
和属性的映射:
<property name="District" access="field.camelcase-underscore" />
在这个映射方案中,您的代码将使用属性来获取/设置数据,而NHibernate使用字段来执行相同的操作。如果您省略了访问设置,如果property District确实为NULL,NHibernate将认为您已将property District更改为新值,它将尝试更新相应的数据库记录。这可能会导致错误。
我从未使用过Fluent NHibernate,所以我不知道如何使用Fluent。好的,我明白……但这会在某种程度上影响NHibernate映射?@aGuy我对NHibernate不太熟悉,但我很确定您可以创建到字段而不是属性的映射。原始示例在调用getter或setter时引发stackoverflow异常。我知道……但这会在某种程度上影响nHibernate映射?@aGuy我对nHibernate不太熟悉,但我相当确定您可以创建到字段而不是属性的映射