小编cbp*_*cbp的帖子

将现有表上的 newid() 更改为 newsequentialid()

目前,我们有许多表在主键上使用 newid() 。这导致了大量的碎片。所以我想更改该列以使用 newsequentialid() 代替。

我认为现有数据仍将保持相当分散,但新数据的分散程度将减少。这意味着我也许应该等待一段时间,然后再将 PK 索引从非聚集更改为聚集。

我的问题是,有人有这样做的经验吗?有什么是我忽略的、应该注意的吗?

sql newid clustered-index newsequentialid

5
推荐指数
1
解决办法
4437
查看次数

Visual Studio预构建脚本无法在windows/system32中找到exe文件

我很难过.突然之间,Visual Studio无法在Windows/System32目录中找到exe文件(例如xcopy,attrib等).

我有一些预构建和后构建事件,它们执行使用xcopy和attrib的批处理文件.以前它们工作正常,但今天,在构建过程中,Visual Studio找不到它们.显示错误:'xcopy'未被识别为内部或外部命令,可操作程序或批处理文件.

当我第一次发现问题时,我尝试在常规cmd提示符下运行xcopy,并且出现了同样的问题.重新启动计算机后,问题在常规cmd提示符中消失,但仍保留在Visual Studio中.重新启动后,Visual Studio cmd提示中也不会出现此问题 - 仅在Visual Studio本身内.

如果在我执行的一个批处理文件中设置检查PATH变量或echo%systemroot%,则一切正常.

在工具 - >选项菜单中,有VisualC++目录的设置.但是,我正在运行C#,而不是C++,此外,我从未更改过这些设置,它们似乎是正确的.

以前有人有这个问题吗?思考?

events command prompt visual-studio

5
推荐指数
1
解决办法
2989
查看次数

刷新NHibernate同时仍然允许事务回滚

我试图将NHibernate与未与NHibernate映射的遗留实体一起使用.有时这意味着我需要手动将NHibernate数据刷新到数据库,这样当我尝试将遗留实体与NHibernate映射实体连接时,我不会收到外键异常.

当这发生在需要回滚的事务中时会发生问题.从NHibernate刷新的数据不会回滚.

我能做些什么吗?

UPDATE

仍然很好奇如何做到这一点 - 我不相信给出的任何答案都解决了这个问题.我需要调用Flush().问题是,如何回滚已刷新的数据?

nhibernate transactions flush

5
推荐指数
1
解决办法
5017
查看次数

简单的C问题

我出生在现代世界,所以我不经常需要处理这类事情,但有人可以解释如何在以下代码中获得正确的数字.这是许多人的一次尝试:

#define     X   2527
#define     Y   2463
#define     Z   3072

main()
{
long int c = X*Y*Z;
printf("%ld",c);
}
Run Code Online (Sandbox Code Playgroud)

我只是想打印一个长整数,但它总是打印错误的结果.我得到整数溢出 - 如果是这样我怎么能防止它们?或者它是我选择的printf格式化程序?

c

5
推荐指数
1
解决办法
306
查看次数

在规范中组合 C# 代码和数据库代码

有时您需要定义一些业务规则,规范模式是一个有用的工具。例如:

public class CanBorrowBooksSpec : ISpecification<Customer>
{
    public bool Satisfies(Customer customer)
    {
         return customer.HasLibraryCard
              && !customer.UnpaidFines.Any();
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,我经常发现我需要将这些规则“推送”到 SQL 中以提高性能或满足记录分页列表之类的要求。

然后,我必须为规则编写代码两次,一次使用 CLR 代码,一次使用 SQL(或 ORM 语言)。

您如何组织这样的代码?

最好将代码放在同一个类中。这样,如果开发人员正在更新业务规则,他们忘记更新两组代码的可能性就较小。例如:

public class CanBorrowBooksSpec : ISpecification<Customer>
{
    public bool Satisfies(Customer customer)
    {
         return customer.HasLibraryCard
              && !customer.UnpaidFines.Any();
    }

    public void AddSql(StringBuilder sql)
    {
        sql.Append(@"customer.HasLibraryCard 
                     AND NOT EXISTS (SELECT Id FROM CustomerUnpaidFines WHERE CustomerId = customer.Id)");
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说似乎很难看,因为我们现在将担忧混合在一起。

另一种替代方案是使用 Linq-To-YourORM 解决方案,因为 LINQ 代码可以针对集合运行,也可以转换为 SQL。但我发现,除了最琐碎的场景之外,这种解决方案几乎不可能实现。

你做什么工作?

c# specification-pattern

5
推荐指数
1
解决办法
4508
查看次数

在启动项目进行调试时,为什么Visual Studio构建整个解决方案而不仅仅是项目?

在Visual Studio中,如果选择"开始调试"或"启动而不调试"以运行当前选定的启动项目,Visual Studio将始终构建整个解决方案.这似乎是不必要的,因为它真正需要做的就是构建你想要启动的项目及其依赖项.

例如,如果您有一些单元测试项目,则在所有单元测试项目也进行编译之前,您无法运行启动项目.至少,构建所有这些单元测试项目是浪费时间,因为无论如何,希望运行的项目都不会依赖于它们.

是否有可能改变这种行为?

debugging unit-testing visual-studio

5
推荐指数
1
解决办法
3318
查看次数

异常日志记录HttpModule不会从ASP .NET Page Method中捕获错误

我们有一个HttpModule,用于捕获异常并将它们记录到db.它看起来像这样:

public class ExceptionLoggingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.Error += OnError;
    }

    private static void OnError(object sender, EventArgs e)
    {
        try
        {
            var context = (HttpApplication) sender;
            var exception = context.Server.GetLastError();

            if (exception != null)
            {
                // Log exception
            }
        }
        catch(Exception)
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这通常是有效的,但我注意到,当Page Methods中出现错误时,OnError方法永远不会触发(即使用WebMethod属性标记的代码隐藏文件中的方法).

怎么会?

除了重新实现Page方法本身内部的异常日志记录之外,我能做些什么吗?

asp.net webforms

5
推荐指数
1
解决办法
1795
查看次数

NHibernate:在查询中将Guid转换为字符串

将NHibernate与Linq或Criterion一起使用,是否可以在GUID列上执行LIKE查询?

在T-SQL中,这很简单:*select*from mytable,其中id为'0ae%'*

但是NHibernate不会将Guid转换为字符串.

nhibernate

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

SQL Server:如果基础表发生更改,则需要重新创建使用SELECT*的视图

有没有办法使使用SELECT*的视图与基础表保持同步.

我发现的是,如果对基础表进行了更改,从中选择所有列,则需要"重新创建"视图.这可以通过运行ALTER VIEW语句来简单地实现.

然而,这可能导致一些非常危险的情况.如果您忘记重新创建视图,则不会返回正确的数据.事实上,它可以返回严重混乱的数据 - 列的名称都是错误的和乱序的.

除非您碰巧将测试覆盖,或者数据完整性检查失败,否则什么都不会发现视图是错误的.例如,Red Gate SQL Compare没有发现需要重新创建视图的事实.

要复制问题,请尝试以下语句:

CREATE TABLE Foobar (Bar varchar(20))

CREATE VIEW v_Foobar AS SELECT * FROM Foobar

INSERT INTO Foobar (Bar) VALUES ('Hi there')

SELECT * FROM v_Foobar

ALTER TABLE Foobar
ADD Baz varchar(20)

SELECT * FROM v_Foobar

DROP VIEW v_Foobar
DROP TABLE Foobar
Run Code Online (Sandbox Code Playgroud)

我很想在视图中停止使用SELECT*,这将是一个PITA.某个地方是否有可能解决此问题的设置?

sql-server

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

查询活动目录以获取用户在.NET中的角色

我一直在使用Linq到Active Directory,但我发现很难获得用户所属的所有角色的列表.我可以检索他们的直接组的列表,但它不是递归的.

我试图查询AD目录的原因是解决内置的角色管理器AspNetWindowsTokenRoleProvider,它不允许您调用Roles.GetRolesForUser(用户名),除非用户名与当前的Windows标识匹配.

.net ldap active-directory

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