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