相关疑难解决方法(0)

无法截断表,因为它是由FOREIGN KEY约束引用的?

使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?

我知道我也可以

  • 使用DELETE不带where子句然后RESEED使用身份(或)
  • 删除FK,截断表,然后重新创建FK.

我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:

无法截断表'TableName',因为它正被FOREIGN KEY约束引用.

t-sql sql-server truncate sql-server-2005 foreign-keys

427
推荐指数
16
解决办法
61万
查看次数

实体框架和上下文配置

什么时候应该DbContext.dispose()用实体框架调用?

  1. 这种想象的方法难道不好吗?

    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)
  2. 这是否更好?

    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)
  3. 这是否更好,也就是说,当使用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)

entity-framework idisposable dbcontext

61
推荐指数
3
解决办法
7万
查看次数

截断表的权限

在MSSQL中,为了能够截断表,我需要什么权限来授予用户权限?

我正在尝试授予最小的权限集,但我不能使用DELETE,因为表非常大,我希望操作很快.

sql-server database-permissions

41
推荐指数
3
解决办法
8万
查看次数

你能从DbSet获得DbContext吗?

在我的应用程序中,有时需要在一次操作中将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?我不喜欢把它作为参数 - 感觉它应该是不必要的.

c# entity-framework entity-framework-4.1 dbcontext dbset

22
推荐指数
3
解决办法
1万
查看次数

DbSet表名

要在Entity framework 4.0上获取数据库表名,我会:

ObjectSetInstance.EntitySet.ToString()
Run Code Online (Sandbox Code Playgroud)

有没有办法在Entity Framework 4.1上执行此操作?

c# entity-framework-4.1

15
推荐指数
3
解决办法
2万
查看次数

使用Entity Framework删除大项目列表

我想用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# entity-framework sql-delete

4
推荐指数
1
解决办法
7219
查看次数