在我发现首先在EF代码中插入操作后没有填充导航属性后,我决定创建一个方法来重新加载导航。让我们认为我们有两个类:
public class Book
{
public int Id {get ; set;}
public string Title {get ; set;}
public virtual ICollection<Page> Pages {get ; set;}
}
public class Page
{
public int Id {get ; set;}
public string Content {get ; set;}
public int BookId {get ; set;}
public virtual Book Book {get ; set;}
}
并在以下代码中我有:
DbContext db = new DbContext()
Page p = new Page();
p.BookId = 1;
p.Content = "Sample Content";
db.Pages.Add(p);
db.SaveChanges();
db.Reload(p, rec => rec.Book); // Here is the wanted method
我试过这个,但我失败了
public class DbContext : DbContext
{
///I know this method is wrong, I have no idea to fix it
public T Reload<T>(T Obj, param Func<T,I_DONT_KNOW_WHAT_I_SHOULD_PUT_HERE>[] predicates )
{
foreach(var item in predicates)
{
this.Entry<T>(Obj).Reference(item).Load();
}
}
}
有没有人帮我完成这个方法?
答案 0 :(得分:0)
我要注意我确实遵循你要做的事情。 但我的第一个是推荐
基本的重新加载表格是:
Context.Entry<TPoco>(poco).Reload();
您也可以使用包含表单
var Qpocolist = Context.Set<TPoco>().Include(t=>t.Navprop).Where(t => t.Navprop.xyz=="xyz");
但也许它只是传递了一个你想要提示的道具表达式数组。 您需要将该方法声明为Poco和Property的通用。
public void MyFancySetNavs<TPoco, TProp>(TPoco obj, params Expression<Func<TPoco, TProp>>[] navProps) {
foreach (var navPropExp in navProps) {
// do ya thing...
}
}
答案 1 :(得分:0)
我将代码更改为此,因此导航器正确填充。所以我不需要这样提到的方法
DbContext db = new DbContext()
Page p = db.Pages.Create();
p.BookId = 1;
p.Content = "Sample Content";
db.Pages.Add(p);
db.SaveChanges();
db.Reload(p, rec => rec.Book);