如果使用存储过程填充模型,如何在EF中填充引用对象?

时间:2016-04-14 12:28:06

标签: c# entity-framework

我有以下型号:

public partial class Names
{
    public int ID { get; set; }

    [Required]
    [StringLength(50)]
    public string FirstName { get; set; }

    public int LastNameRef { get; set; }

    public virtual LastNameModel LastName { get; set; }
}

我在SQL中有一个存储过程,执行以下操作:

select id, FirstName, LastNameRef from Names

现在,我通过执行以下操作在C#中调用存储过程:

var ret = this.Database.SqlQuery<Names>("dbo.RetrieveFirstNames").ToList();

上面的问题是LastNameModel对象永远不会正确填充并返回null。有没有办法自动使用EF?

我所做的是通过遍历集合并找到具有&#39; LastNameRef&#39;的引用键的正确LastNameModel对象来手动更新它。

1 个答案:

答案 0 :(得分:1)

当您将virtual关键字添加到LastName时,此属性将被延迟加载 - 即在代码中引用之前不会填充,从而调用对数据库的另一个RPC调用以获取相关数据

您的模型需要复制存储过程将返回的内容,因此需要是扁平结构。如果您需要LastNameModel详细信息,则必须在模型和存储过程SELECT中包含其列。