【发布时间】:2014-10-17 18:11:55
【问题描述】:
我刚开始尝试构建一些测试 ASP.Net Web API 应用程序,但遇到了一个问题:
我的模型如下:
public class Asset
{
public int Id { get; set; }
[ForeignKey("AssetType")]
public int AssetTypeId { get; set; }
public AssetType AssetType { get; set; }
}
public class AssetType
{
public int Id { get; set; }
public string Name { get; set; }
}
并尝试通过
从数据库中获取所有记录 public IEnumerable<Asset> GetAssets()
{
return db.Assets.AsEnumerable();
}
我得到了一些奇怪的结果(至少这对我来说很奇怪)。而不是扩展 AssetType - 我得到 nil 的:
<Asset>
<AssetTypeId>1</AssetTypeId>
<Id>1</Id>
<AssetType i:nil="true"/>
</Asset>
我检查了我的数据库 - 它在 AssetTypeId 和 AssetType 字段中都包含正确的 ID,指向正确的资产类型。 我发现扩展字段的唯一方法是将 GetAssets 更改为:
public HttpResponseMessage GetAssets()
{
return Request.CreateResponse(HttpStatusCode.OK, db.Assets.Include("Type").ToList());
}
但我觉得我错了,因为实际上我有几十个这样的“复杂”字段,其中一些是嵌套的,通过“.Include(“Type”)”添加它们是错误的。
所以问题是 - 我在哪里犯了错误?如何正确获取我的数据?
【问题讨论】:
-
注意我相信你可以只使用
public virtual AssetType AssetType { get; set; }但是你需要小心ORM的N+1问题stackoverflow.com/questions/97197/what-is-the-n1-selects-issue我个人讨厌ORM中的延迟加载。
标签: c# asp.net asp.net-web-api