作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有以下模型结构
public class QuestionItem: EntityData
{
public string Content { get; set; }
public bool IsAnswered { get; set; }
public int NumberOfAnswers
{
//todo: make it computable
get;
set;
}
public UserItem By { get; set; }
public string ById { get; set; }
public string AtLocation { get; set; }
}
&父实体为
public class UserItem:EntityData
{
public string UserName { get; set; }
public string Gender { get; set; }
public string BaseLocation { get; set; }
public int Age { get; set; }
public int Points { get; set; }
}
这确实会生成具有正确 FK 关系的数据库表。但是当查询问题项目列表时,QuestionItem.By 属性(UserItem 表的引用对象)为空。
通常这是通过在查询级别使用 .Include 方法来实现的,但我无法找到我应该在哪里执行此操作。
感谢任何帮助。
苏普雷特
最佳答案
正如 @JuneT 提到的,您需要从客户端发送 $expand
header 。原因是默认情况下 Entity Framework 不会遍历对象图,因为这需要在数据库中进行联接,如果您不需要这样做,可能会对性能产生负面影响。
另一种选择,我在 this blog post 中提到过,就是在服务器端使用过滤器来为您添加该 header 。例如,使用以下属性:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
class ExpandPropertyAttribute : ActionFilterAttribute
{
string propertyName;
public ExpandPropertyAttribute(string propertyName)
{
this.propertyName = propertyName;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var uriBuilder = new UriBuilder(actionContext.Request.RequestUri);
var queryParams = uriBuilder.Query.TrimStart('?').Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries).ToList();
int expandIndex = -1;
for (var i = 0; i < queryParams.Count; i++)
{
if (queryParams[i].StartsWith("$expand", StringComparison.Ordinal))
{
expandIndex = i;
break;
}
}
if (expandIndex < 0)
{
queryParams.Add("$expand=" + this.propertyName);
}
else
{
queryParams[expandIndex] = queryParams[expandIndex] + "," + propertyName;
}
uriBuilder.Query = string.Join("&", queryParams);
actionContext.Request.RequestUri = uriBuilder.Uri;
}
}
您可以装饰您的操作以强制相关实体的扩展。
[ExpandProperty("By")]
public IQueryable<QuestionItem> GetAll() {
return base.Query();
}
关于.net - 我们如何在基于Dot Net的Azure移动服务中加载相关对象(预加载)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23333795/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!