3

Web サイトにアクセスし、そこからデータを抽出してデータベースに保存するクローラーを作成しています。クローラーは、以前の実行で既に見つかったデータも更新する必要があります。

EF POCO でサイトから解析された情報を返します。ParseDataPageそのプロパティの 1 つは一意の識別子 (db テーブルの主キーでもあります) です。どうすれば EF にオブジェクトを挿入/追加するように指示できますか?

class Program
{
    static void Main()
    {

        var context = (adCreatorEntities) DbContextFactory.GetInstance().GetDbContext<adCreatorEntities>();
        var crawler = new DataCrawler();            
        crawler.Login();
        var propertyIds = crawler.GetPropertyIds();

        foreach (var id in propertyIds)
        {
            var poco = crawler.ParseDataPage(id);
            context.Properties.Add(poco); //<-- How can I tell EF to update if the record exists or to insert it otherwise??
            context.SaveChanges();
        }

        context.SaveChanges();

        if (crawler.LoggedIn)
            crawler.Logout();
    }
}
4

2 に答える 2

4

キーの値に基づいて、エンティティの状態を設定しModifiedたり、エンティティを追加したりできます。DbSet

if(entity.propertyId <= 0)
{
    context.Properties.Add(poco); 
}
else
{
      context.Entry(poco).State = EntityState.Modified;
}

これは EF5 のコードです。EF4 は、オブジェクトの状態を設定するために若干異なります。

context.ObjectStateManager.ChangeObjectState(poco, EntityState.Modified);
于 2013-10-24T04:03:29.890 に答える
1

次のコードを使用して、レコードが存在するかどうかを確認できます。

 var entity= dataContext.Properties.Find(b => b.UniqueId == poco.UniqueId);
                    if (entity== null)
                    {
                        dataContext.Properties.Add(poco);
                    }
                    else
                    {
                       dataContext.Entry(entity).State = EntityState.Modified;
                    }
                   dataContext.SaveChanges();
于 2013-10-24T04:07:10.137 に答える