将存储过程中的复杂结果集转换为实体及其子实体



我有一个存储过程,它返回一系列连接表结果作为几个结果集之一,ala:

SELECT 
    a.*,
    at.*
FROM
    dbo.UserProfile up
JOIN
    dbo.Players p ON up.UserId = p.UserId
JOIN
    dbo.PlayerAbilities pa ON p.PlayerId = pa.PlayerId
JOIN
    dbo.Abilities a ON pa.AbilityId = a.AbilityId
JOIN
    dbo.Attributes at ON a.AttributeId = at.AttributeId
WHERE
    up.UserName = @userName

我的Ability类的实体类结构如下:

class Ability
{
    /* Standard Properties */
    public Attribute Attribute { get; set; }
}

当我用代码调用这个存储过程时:

//Establish that var reader = (stored procedure).ExecuteReader()
var abilities = ((IObjectContextAdapter)context)
                        .ObjectContext
                        .Translate<Ability>(reader);

我得到一个Ability对象的集合,但是它们的Attribute属性没有被填充。如何修改存储过程或指示实体框架允许填充此属性?

编辑属性表和能力表模式:

TABLE Attributes
{
    AttributeId INT PKEY
    AttributeName VARCHAR(50)
}
TABLE Abilities
{
    AbilityId INT PKEY
    AbilityName VARCHAR(50)
    AbilityDescription VARCHAR(500)
    AttributeId INT FKEY => Attributes.AttributeId
    ClassificationId INT FKEY => Classifications.ClassificationId
    BaseDamage INT
    LevelRequired INT
    PriceId INT FKEY => Prices.PriceId
    RecordStatusId INT FKEY => RecordStatuses.RecordStatusId
}

忘了在原编辑中添加这个:

class Attribute
{
    public int AttributeId { get; set; }
    public string AttributeName { get; set; }
    public ICollection<Ability> Abilities { get; set; }
    //Never used, doesn't matter for lazy loading though, never got around to deleting
    public virtual ICollection<Monster> Monsters { get; set; }
    public virtual ICollection<Monster> Monsters1 { get; set; }
}

我最初没有在上面的属性问题中包括分类/价格/记录状态列信息,因为我认为这是多余的,但我在这里包括了它们,以防它是相关的。

Translate不知道如何处理导航属性,但如果查询属性在单独的查询和EF中应该修复关系

最新更新