C# 在EF中插入/更新实体?

C# 在EF中插入/更新实体?,c#,entity-framework,C#,Entity Framework,我正在编写一个爬虫程序,它应该去一个网站,从那里提取一些数据,然后将其存储到数据库中,问题是爬虫程序还应该更新在以前的运行中已经找到的数据 ParseDataPage返回从EF POCO中的站点解析的信息,其属性之一是唯一标识符(也是db表中的主键),如何告诉EF插入/添加对象 class Program { static void Main() { var context = (adCreatorEntities) DbContextFactory.GetIn

我正在编写一个爬虫程序,它应该去一个网站,从那里提取一些数据,然后将其存储到数据库中,问题是爬虫程序还应该更新在以前的运行中已经找到的数据

ParseDataPage
返回从EF POCO中的站点解析的信息,其属性之一是唯一标识符(也是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();
    }
}
类程序
{
静态void Main()
{
var context=(adCreatorEntities)DbContextFactory.GetInstance().GetDbContext();
var crawler=新的数据爬虫();
crawler.Login();
var propertyIds=crawler.GetPropertyIds();
foreach(PropertyId中的变量id)
{
var poco=crawler.ParseDataPage(id);

context.Properties.Add(poco);//您可以将实体状态设置为
Modified
,或者根据键的值将实体添加到
DbSet

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

您可以使用以下代码检查记录是否存在,


我还是不明白。我的意思是,在我调用
var-poco=parseDataPage(id)
之后,poco.id将一直被设置。无论是新记录还是现有记录。我应该一直这样做吗
var-poco=parseDataPage(id);poco.State=EntityState.Modified;context.Properties.Attach(poco);
?我的代码假设新的poco没有id

context.ObjectStateManager.ChangeObjectState(poco, EntityState.Modified);
 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();