我在访问数据时遇到一些麻烦是一对多的关系,用户有很多书。这是数据库的第一个场景(这就是我运行脚手架命令的原因)。
以下是我尝试访问数据的方式:
using (var db = new MyContext())
{
var user = db.User.First(u => u.UserId == 1);
var firstBook = user.Book.First(); // error: Sequence contains no elements
}
我用命令生成了我的上下文和模型:
dnx ef dbcontext scaffold "ConnectionString" EntityFramework.MicrosoftSqlServer --outputDir DatabaseModels
在上下文中,对此关系的唯一引用是Book
:
modelBuilder.Entity<Book>(entity =>
{
entity.HasOne(d => d.UserIdNavigation).WithMany(p => p.Book).HasForeignKey(d => d.UserId).OnDelete(DeleteBehavior.Restrict);
});
Book
和User
的相关部分:
图书:
public virtual User UserIdNavigation { get; set; }
用户:
public virtual ICollection<Book> Book { get; set; }
任何想法可能是什么问题?
如果我先加载图书并检查其用户关系,那么user.Book.First()
行就可以了。
例如:
using (var db = new MyContext())
{
var user = db.User.First(u => u.UserId == 1);
var userFromBook = db.Book.Last().UserIdNavigation;
var firstBook = user.Book.First(); // now this succeeds
}
显然,总是必须直接从您希望通过关系访问的上下文中查找记录,这并不理想。