在处理Code First(EF 4.3)时,有没有办法使用List<T>
中的DbSet<T>
,然后将更改保留到列表中?
例如......
class Program {
static void Main(string[] args) {
Database.SetInitializer(new DropCreateDatabaseAlways<Context>());
Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
using (Context c = new Context()) {
// Works
c.Entities.Add(new Entity());
// Doesn't work
List<Entity> entities = c.Entities.ToList();
entities.Add(new Entity());
// Somehow attach the new unattached elements?
c.SaveChanges();
Console.WriteLine(c.Entities.Count()); // Prints 1
Console.ReadLine();
}
}
}
class Context : DbContext {
public DbSet<Entity> Entities { get; set; }
}
class Entity {
public int Id { get; set; }
public int Foo { get; set; }
}
我有办法做到这一点吗?
答案 0 :(得分:1)
在这个简单的例子中,你可以做这样的事情。
foreach(Entity entity in entities)
{
var entry = c.Entry(entity);
if (entry.State == EntityState.Detached)
{
c.Entities.Add(entry);
}
}
但是,这可能不适用于更复杂的情况。有几种不同的方法可以解决这个问题。
Entity.Id == 0
,假设Id从1开始。