使用EF 6.1我希望能够在不知道主键的情况下从DbContext返回单个实体,并填充其导航属性。
例如实体:
public class MyEntity
{
public int SomeSortOfPrimaryKey { get; set; }
public string SomeProperty { get; set; }
public virtual SomeOtherEntity SomeOtherEntity { get; set; }
}
我有一个可用的实体实例,所以我尝试过:
var entityWithNavProps = _dbContext.Entry(entity).Entity;
但这并没有让实体拥有它的导航属性。显然,.Find()
方法不起作用,因为它期望字符串,guid或整数。
有没有其他方法可以使用实体,还有DbContext可以这样做吗?
谢谢。
答案 0 :(得分:0)
不,你不能。
您需要提供参考导航属性的ID。
例如,给定这些模型。
public class Book
{
public int Id { get; set; }
public int AuthorId { get; set; }
public User Author { get; set; }
}
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
如果您没有提供引用ID或提供无效ID,则不会加载引用。
// AuthorId = 0 is invalid id.
var book = new Book { Id = 1, AuthorId = 0 };
db.Books.Attach(book);
db.Entry(book).Reference(b => b.Author).Load();
当您提供有效的参考ID时,它将加载参考。
// AuthorId = 1 is a valid id.
var book = new Book { Id = 1, AuthorId = 1 };
db.Books.Attach(book);
db.Entry(book).Reference(b => b.Author).Load();
PS:除非它是集合导航属性。