使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?
我知道我也可以
DELETE
不带where子句然后RESEED
使用身份(或)我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:
无法截断表'TableName',因为它正被FOREIGN KEY约束引用.
什么时候应该DbContext.dispose()
用实体框架调用?
这种想象的方法难道不好吗?
public static string GetName(string userId)
{
var context = new DomainDbContext();
var userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
context.Dispose();
return userName;
}
Run Code Online (Sandbox Code Playgroud)这是否更好?
public static string GetName(string userId)
{
string userName;
using(var context = new DomainDbContext()) {
userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
context.Dispose();
}
return userName;
}
Run Code Online (Sandbox Code Playgroud)这是否更好,也就是说,当使用using()时,是否应该调用context.Dispose()?
public static string GetName(string userId)
{
string userName;
using(var context = new DomainDbContext()) {
userName = context.UserNameItems.FirstOrDefault(x => x.UserId == userId);
}
return userName;
}
Run Code Online (Sandbox Code Playgroud)在MSSQL中,为了能够截断表,我需要什么权限来授予用户权限?
我正在尝试授予最小的权限集,但我不能使用DELETE,因为表非常大,我希望操作很快.
在我的应用程序中,有时需要在一次操作中将10,000行或更多行保存到数据库中.我发现简单地迭代并一次添加一个项目可能需要花费半个多小时.
但是,如果我禁用AutoDetectChangesEnabled它需要约5秒(这正是我想要的)
我正在尝试向DbSet创建一个名为"AddRange"的扩展方法,该方法将禁用AutoDetectChangesEnabled,然后在完成时重新启用它.
public static void AddRange<TEntity>(this DbSet<TEntity> set, DbContext con, IEnumerable<TEntity> items) where TEntity : class
{
// Disable auto detect changes for speed
var detectChanges = con.Configuration.AutoDetectChangesEnabled;
try
{
con.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in items)
{
set.Add(item);
}
}
finally
{
con.Configuration.AutoDetectChangesEnabled = detectChanges;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:有没有办法从DbSet获取DbContext?我不喜欢把它作为参数 - 感觉它应该是不必要的.
要在Entity framework 4.0上获取数据库表名,我会:
ObjectSetInstance.EntitySet.ToString()
Run Code Online (Sandbox Code Playgroud)
有没有办法在Entity Framework 4.1上执行此操作?
我想用EF删除一个大的项目列表,所以我试图逐个删除它们,但这需要很长时间.
我尝试使用.RemoveAll()
我的列表中的方法,但它不更新数据库[仅从已加载的实体中删除]
所以我使用a SqlCommand
从数据库中删除它们,我.RemoveAll()
用来防止EF unexpected number of rows update (0)
异常.
码:
dbContext.Database.ExecuteSqlCommand("DELETE FROM xxx WHERE xxx");
loadedEntity.subItems.ToList().RemoveAll(r => true);
dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我的问题:有更好的方法吗?
c# ×3
dbcontext ×2
sql-server ×2
dbset ×1
foreign-keys ×1
idisposable ×1
sql-delete ×1
t-sql ×1
truncate ×1