EntityFramework Migrations提供了一种扩展方法DbSet<T>
,专门用于在迁移期间播种数据:
void AddOrUpdate<TEntity>(this IDbSet<TEntity> set, params TEntity[] entities);
Run Code Online (Sandbox Code Playgroud)
在"常规"代码中使用它是否安全,即不能在迁移期间播种数据?
var blog = ...//detached instance from a request
using (var context = new BloggingContext())
{
context.Blogs.AddOrUpdate(blog);
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但我想知道它与"传统的"'分离实体'sceario相比是否有任何缺点 - 例如,如MSDN(文章的最后部分)所述:
using (var context = new BloggingContext())
{
context.Entry(blog).State = blog.BlogId == 0 ?
EntityState.Added :
EntityState.Modified;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
oct*_*ccl 11
好吧,根据EF的权威Julie Lerman的说法,你应该AddOrUpdate
只在迁移时使用方法,请查看这篇博文:
"它适用于迁移过程中的种子数据.它看起来像是一种很好的方法,可以添加到你的应用程序中,但这不是它的目的."
...
首先,它将在您的数据库中执行查询,查找记录,其中您作为键提供的任何内容(第一个参数)与提供的映射列值(或值)相匹配
AddOrUpdate
.所以这对于匹配来说有点松散 - 但是对于播种设计时间数据来说非常好.
正如您所看到的,它有一个额外的成本,因为在添加或更新之前,它会执行查询记录是否已存在.因此,最好的方法是使用您在帖子末尾提到的代码.
归档时间: |
|
查看次数: |
4586 次 |
最近记录: |