我有以下型号:
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
对象来手动更新它。
答案 0 :(得分:1)
当您将virtual
关键字添加到LastName
时,此属性将被延迟加载 - 即在代码中引用之前不会填充,从而调用对数据库的另一个RPC调用以获取相关数据
您的模型需要复制存储过程将返回的内容,因此需要是扁平结构。如果您需要LastNameModel
详细信息,则必须在模型和存储过程SELECT
中包含其列。