0

在我发现在 EF Code first 中插入操作后导航属性没有填充后,我决定创建一个方法来重新加载导航。假设我们有两个类:

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();
        }
    }
}

有没有人可以帮我完成这个方法?

4

2 回答 2

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...
        }

    }
于 2013-08-25T13:44:23.293 回答
0

我将代码更改为 this ,以便导航器正确填充。所以我不需要这种提到的方法

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);
于 2013-08-28T05:12:09.460 回答