0

最初に EF コードに挿入操作を行った後、ナビゲーション プロパティが設定されないことがわかったので、ナビゲーションを再読み込みするメソッドを作成することにしました。2 つのクラスがあるとしましょう:

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");

しかし、ヒントが必要な prop 式の配列を渡しているだけかもしれません。メソッドを 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 に答える