是否可以在不知道主键的情况下从DbContext获取具有导航属性的实体

时间:2014-07-17 06:58:17

标签: c# entity-framework

使用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可以这样做吗?

谢谢。

1 个答案:

答案 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();

Result

当您提供有效的参考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();

Result

PS:除非它是集合导航属性。