【发布时间】:2016-08-14 19:10:49
【问题描述】:
我有一个 - 可能有点尴尬 - 我无法找到答案的问题。我有以下实体:
public class Post
{
public Guid Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public Guid Id { get; set; }
public string Name { get; set; }
}
我使用 fluent API 将关系配置为多对多:
modelBuilder.Entity<Post>()
.HasMany(p => p.Tags)
.WithMany()
.Map(m =>
{
m.MapLeftKey("PostId");
m.MapRightKey("TagId");
m.ToTable("PostTags");
});
我想通过标签列表过滤帖子(只返回指定了所有标签的帖子):
context.Posts.Where(p => p.Tags.Any(t => tags.Contains(t)))
其中tags 是用户指定标签的列表,而我的Tag 实体将其Equals 方法重写为基于Id 属性。但是当我运行查询时,我得到一个NotSupportedException:
EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理
附加信息:无法创建“Plog.Domain.Plog.Tag”类型的常量值。此上下文仅支持原始类型或枚举类型。
我怎样才能使这项工作以一种还具有合理性能的方式工作?
【问题讨论】:
-
我假设标签是
Tag的列表?如果是这样,那就是问题
标签: c# .net entity-framework entity-framework-6