로 엔티티를 포장하지 않습니다 여기C#을 NHibernate에 나는 테이블이 프록시
CREATE TABLE [dbo].[GroupPhrases](
[GroupId] [int] NOT NULL,
[PhraseId] [int] NOT NULL,
[Quality] [float] NOT NULL,
[VerdictsCount] [int] NOT NULL,
[IntersectionPercentage] [float] NULL,
[VerdictIds] [varbinary](max) NOT NULL,
[RelevanceResult] [varbinary](max) NOT NULL,
CONSTRAINT [PK_GroupPhrases] PRIMARY KEY CLUSTERED
(
[GroupId] ASC,
[PhraseId] ASC
) ON [PRIMARY]
그리고 것은 테이블의 엔티티 :
public class GroupPhraseEntity
{
public virtual int GroupId { get; set; }
public virtual PhraseEntity Phrase { get; set; }
public virtual double Quality { get; set; }
public virtual int VerdictsCount { get; set; }
public virtual double? IntersectionPercentage { get; set; }
public virtual byte[] VerdictIds { get; set; }
public virtual byte[] RelevanceResult { get; set; }
public override bool Equals(object obj)
{
var castObj = obj as GroupPhraseEntity;
if (castObj == null)
{
return false;
}
return (GroupId == castObj.GroupId) && (Phrase.Id == castObj.Phrase.Id);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
그리고 여기에 매핑 :
public class GroupPhraseEntityMap : ClassMapping<GroupPhraseEntity>
{
public GroupPhraseEntityMap()
{
Table("GroupPhrases");
ComposedId(map =>
{
map.Property(x => x.GroupId);
map.ManyToOne(x => x.Phrase, m =>
{
m.Column("PhraseId");
});
});
Property(x => x.Quality);
Property(x => x.IntersectionPercentage);
Property(x => x.VerdictsCount);
Property(x => x.VerdictIds, m =>
{
m.Column("VerdictIds");
m.Type(NHibernateUtil.BinaryBlob);
m.Length(Int32.MaxValue);
m.Lazy(true);
});
Property(x => x.RelevanceResult, m =>
{
m.Column("RelevanceResult");
m.Type(NHibernateUtil.BinaryBlob);
m.Length(Int32.MaxValue);
m.Lazy(true);
});
}
}
RelevanceResult 필드 값을 반환해야하는 메서드는 다음과 같습니다.
public RelevanceResult GetGroupRelevanceResult(int groupId, int phraseId)
{
using (var session = _sessionManager.GetSession())
{
var groupPhrase = session.Query<GroupPhraseEntity>().FirstOrDefault(x => (x.GroupId == groupId) && (x.Phrase.Id == phraseId));
if (groupPhrase == null)
{
return null;
}
return Deserialize<RelevanceResult>(groupPhrase.RelevanceResult);
}
}
그러나 RelevanceResult 속성이로드되지 않았기 때문에 메서드가 실패합니다. 나는 그 쿼리가 나를 프록시 객체로 감싸지 않고 RelevanceResult 필드를 널로 유지하는 것을 보았다. 그 이유는 무엇입니까?
고맙습니다.
null 또는 예외가 발생 했습니까? 생성 된 sql에 대해 살펴 보았습니까? – Rabban
null이 반환되고 Deserialize 메서드에서 예외가 발생합니다. –
생성 된 sql에 대해 살펴 보았습니까?이 경우 [NhProfiler] (https://www.hibernatingrhinos.com/products/nhprof)를 사용할 수 있습니다 – Rabban