我想限制导航属性返回的模型。例如,我正在使用AuditInfo
模型来记录模型的活动。删除模型后DeletedBy
,Deleted
将设置和属性。但是,由于从未真正从数据库中“删除”任何内容,因此这些模型仍将填充在其他模型引用的导航属性中。
AuditInfo类
public class AuditInfo
{
[Key]
public int AuditInfoID { get; set; }
//Other attributes
public string DeletedBy { get; set; }
public DateTime? Deleted { get; set; }
}
具有导航属性的类
public class BlogPost
{
//Other attributes
//Only return Comment where Comment.AuditInfo.Deleted is NULL
public virtual IList<Comment> Comments { get; set; }
}
正在审核的课程
public class Comment
{
//Other attributes
public int AuditInfoID { get; set; }
}
我将如何设置约束,以使BlogPost.Comments中仅未删除的注释(Comment.AuditInfo.Deleted为NULL)?
(由于该[Key]
属性,我假设您使用的是EF Code-First 。)
有多种加载导航属性和相关实体的方法,您可以对其中一些方法应用过滤器,但不能对所有方法应用过滤器:
您的导航属性必须是virtual
这样,才能完全延迟加载:
public virtual IList<Comment> Comments { get; set; }
加载父项:
var blogPost = context.BlogPosts.Find(1);
foreach (var comment in blogPost.Comments) // lazy loading triggered here
{
}
您不能在此处应用过滤器。延迟加载将始终加载给定博客文章的 所有 评论。
var blogPost = context.BlogPosts.Include(b => b.Comments)
.SingleOrDefault(b => b.Id == 1);
您无法在中应用过滤器Include
。渴望加载将始终加载给定博客文章的 所有 评论。
加载父项:
var blogPost = context.BlogPosts.Find(1);
您现在可以在加载评论时应用过滤器:
context.Entry(blogPost).Collection(b => b.Comments).Query()
.Where(c => !c.AuditInfo.Deleted.HasValue)
.Load();
您可以在投影的属性中应用过滤器:
var blogPost = context.BlogPosts
.Where(b => b.Id == 1)
.Select(b => new
{
BlogPost = b,
Comments = b.Comments.Where(c => !c.AuditInfo.Deleted.HasValue)
})
.SingleOrDefault();
无法在模型定义中应用某种全局过滤器策略,以使该过滤器自动应用于上述 所有
方法,而无需在显式加载和投影示例中明确指定。(我认为您会想到这样的全局模型定义,但这是不可能的。)
问题内容: 因此,我有一个简单的数据库,其中有两个表,首先使用实体框架6.02设置了代码。提交表与tbl_lst_Company表具有一对一关系。它们由company和CompanyID字段关联。 这是Fluent映射: 这是我要测试上述实现的单元测试: 我的问题是,运行此测试时,“公司”字段始终为空。如果我从db.Submissions.Include(“ Company”)中的s明确地说,
我定义了两个具有一对多外键关系的类,它们首先由数据库生成。 我创建了一个代理对象,并将其添加到DBContext中。 然后我设置了一个外键属性并尝试访问相应的导航属性。 设置外键属性标签\u id不会加载导航属性标签。代码中的最后一行返回。 这些类遵循此处列出的创建POCO代理的要求(调试显示已创建代理car对象,因此我相信所有要求都已满足)。 数据库表标签包含主键为4的项。 我不是在这里调用或,
将只填充Enabled属性(下图),而不填充Application或CustomVariableGroup属性(下图)。我该怎么做?
实体框架5.0首先使用现有数据库编写代码。使用电动工具对类进行逆向工程。一切都很好。数据库有两个表。一个父母和一个孩子的外键返回到父母ID。ID都是带有自动增量的int。我添加了许多父母记录,现在想将孩子记录添加到特定的父母。我能看到的唯一方法是通过在父母表中搜索名称或其他属性并返回ID来找到适当的父母ID。然后在添加孩子时在外键属性中使用该ID。我不想设置新父母,所以这是将孩子添加到现有父母的唯
问题内容: 我需要在每个用户已经有一个ID作为键的数据库中存储大量用户数据。但是,这些用户全部来自更大的用户池,因此,该ID不会增加并且无法自动生成。我需要能够手动设置ID。 是否有捷径可寻? 问题答案: 我进行了一些测试,这似乎对我在EF 7.0.0 rc1-final上有效: 我的测试代码: (完整的程序代码在这里:http : //pastebin.com/hSs9HZCP) 它可以正确插入
问题内容: 我正在使用带有嵌套框架的页面,但是无法访问子框架。HTML源代码的简要概述: 我需要访问名为“ mid2”的框架。该框架嵌套在框架集内,而框架集又嵌套在主框架集内。 我尝试了以下代码,但它们确实有效 我是否缺少明显的东西? 我已经检查了此链接,但未阐明我的问题。 谢谢 问题答案: 试试这个: 您遇到的问题是javascript只能与它看到的当前框架一起使用。 在子框架中,因此看不到您是