Hibernate에서 저장 프로 시저를 실행하여 원본 모델에없는 추가 필드를 반환 할 때 방법이 있습니까?NHibernate : 모델에없는 저장 프로 시저에서 추가 속성 반환
내가하고있는 일은 리소스 검색 결과를 반환하는 sproc을 만드는 것입니다. 그것은 내 Resource 클래스의 모든 일반 필드를 반환하지만 Rank라는 추가 필드도 반환합니다. 그걸 현재의 Resource 클래스에 매핑하는 방법이 있습니까 (아니면 Resource에서 상속 받고 그 하나의 속성 만 추가하는 클래스를 만들 수 있습니까?)?
는내 SPROC의 실행은 다음과 같습니다
<sql-query name="GetRelatedResources">
<return alias="item" class="ResourceRanked">
<return-property column="Rank" name="Rank" />
<return-property column="ResourceId" name="Id" />
<return-property column="Name" name="Name" />
<return-property column="Description" name="Description" />
<return-property column="Filename" name="Filename" />
<return-property column="Filetype" name="Filetype" />
<return-property column="IsPublic" name="IsPublic" />
<return-property column="IsFeatured" name="IsFeatured" />
<return-property column="VideoEmbedCode" name="VideoEmbedCode" />
<return-property column="VideoId" name="VideoId" />
<return-property column="VideoPlayerId" name="VideoPlayerId" />
<return-property column="VideoPlayerKey" name="VideoPlayerKey" />
<return-property column="VideoHeight" name="VideoHeight" />
<return-property column="VideoWidth" name="VideoWidth" />
<return-property column="IsDeleted" name="IsDeleted" />
<return-property column="CreatedOn" name="CreatedOn" />
<return-property column="ModifiedOn" name="ModifiedOn" />
<return-property column="CreatedBy" name="CreatedBy" />
<return-property column="ModifiedBy" name="ModifiedBy" />
<return-property column="CreatedByName" name="CreatedByName" />
<return-property column="ModifiedByName" name="ModifiedByName" />
</return>
exec dbo.gbi_sp_GetRelatedResources :pageSize, :pageIndex, :resourceId
</sql-query>
그리고 내 클래스 :
public class Resource : DomainEntity
{
[Required(ErrorMessage = "Please enter a name"), StringLength(100, ErrorMessage = "Name length can not exceed 100 characters")]
public virtual string Name { get; set; }
[StringLength(200, ErrorMessage = "Description length can not exceed 200 characters")]
public virtual string Description { get; set; }
public virtual string Filename { get; set; }
public virtual string Filetype { get; set; }
public virtual bool IsPublic { get; set; }
public virtual bool IsFeatured { get; set; }
[StringLength(500, ErrorMessage = "Embed Code length can not exceed 500 characters")]
public virtual string VideoEmbedCode { get; set; }
public virtual long? VideoId { get; set; }
public virtual long? VideoPlayerId { get; set; }
[StringLength(100, ErrorMessage = "Player Key length can not exceed 100 characters")]
public virtual string VideoPlayerKey { get; set; }
public virtual int? VideoHeight { get; set; }
public virtual int? VideoWidth { get; set; }
//public virtual int Rank { get; set; }
public virtual string Format {
get
{
if (ResourceFileType == ResourceFileType.EmbeddedVideo || ResourceFileType == ResourceFileType.VideoPlayer)
return "Video";
switch (Filetype)
{
case "pdf":
return "Adobe Acrobat";
case "docx":
case "doc":
return "Microsoft Word";
case "ppt":
case "pptx":
return "Microsoft PowerPoint";
case "xls":
case "xlsx":
return "Microsoft Excel";
default:
return Filetype.ToUpper();
}
}
}
public virtual ResourceFileType ResourceFileType
{
get
{
if (VideoId.HasValue)
return ResourceFileType.VideoPlayer;
if (!VideoEmbedCode.IsNullOrEmpty() || VideoId.HasValue)
return ResourceFileType.EmbeddedVideo;
return ResourceFileType.Document;
}
}
public virtual IEnumerable<Market> Markets { get; set; }
public virtual IEnumerable<Workstream> Workstreams { get; set; }
public virtual IEnumerable<Tag> Tags { get; set; }
public virtual IEnumerable<Topic> Topics { get; set; }
public virtual IEnumerable<ResourceType> Types { get; set; }
public override string ToString()
{
return Id + " - " + Name;
}
}
가 이상적으로 난 그냥
public class ResourceRanked : Resource
{
public virtual int Rank { get; set; }
}
자원을 확장하기 위해이 같은 클래스를하고 싶습니다
하지만 Resource 클래스의 xml 매핑을 복제하지 않으면 작동하지 않습니다. 내가 nhibernate에 대한 하위 클래스를 살펴 봤지만, 내가하려는 일에 적합하지 않은 것 같습니다.