所以我有
class User
{
...
public virtual ICollection<Book> AlreadyRead {get; set;}
}
class Book
{
...
public virtual User Owner {get; set;}
public bool AlreadyRead {get; set;}
}
所以我需要的是User.AlreadyRead返回给我这个用户的书籍,其中AlreadyRead == true
我试过这个绑定
modelBuilder.Entity<Book>()
.HasRequired(b => b.Owner)
.WithMany(u => u.AlreadyRead)
但就这样,User.AlreadyRead会返回所有书籍,但我只需要AlreadyRead == true的书籍;
是否可以使用映射解决此问题,但不能使用Where逻辑来解决此问题?
我只需要能够为映射添加条件,它将检查AlreadyRead == true
最佳答案 对不起,但我担心不可能在关系配置中包含条件.但是,作为部分解决方案,我建议您在User类中添加
NotMapped
属性.你的模型是这样的:
public class User
{
...
public virtual ICollection<Book> Books{get; set;}
[NotMapped]
public IEnumerable<Book> AlreadyReadedBooks
{
get
{
return Books.Where(b=>b.AlreadyRead);
}
}
}
public class Book
{
...
public virtual User Owner {get; set;}
public bool AlreadyRead {get; set;}
}
你的关系配置是这样的:
modelBuilder.Entity<Book>()
.HasRequired(b => b.Owner)
.WithMany(u => u.Books);
更新:
navegation属性用于表示表之间的关系,并提供一种导航两种实体类型之间关联的方法.在您的情况下,您正在建立书籍和用户之间的一对多关系,并且它的工作原理是因为在表格上定义了一个代表关系的多端(书籍)的外键.在关系数据库中建立两个表之间的关系时,无法在关系中添加限制,在声明navegation属性时,实体框架中也会出现相同的情况.这样,如果您需要特定用户的书籍,您需要进行查询.