小编Ray*_*Ray的帖子

数据库设计:更多的表与更少的表

假设我想为社区网站设计一个包含博客,照片,论坛等的数据库,一种方法是单独列出"帖子"的概念,博客条目,博客评论,照片,照片评论,一个论坛帖子都可以被认为是一个帖子.所以,我可能有一个名为Post [PostID,PostType,Title,Body ....]的表,PostType将告诉它是什么类型的帖子.

或者我可以使用更多表格,BlogPost,PhotoPost,ForumPost来设计这一整个事情,并且我将使用CommentType列留下评论它自己的表.

或者为所有类型的帖子都有一个Post表,但是有一个单独的Comment表.

为了完整,我正在使用ADO.NET Entity Framework来实现我的DAL.

现在的问题是,如果我采用上述任何路线影响我的数据库性能和可管理性,中间层设计和代码清晰度,EF性能等,会产生什么影响?

非常感谢你!

射线.

oop database-design entity-framework

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

在NOLOCK上使用ADO.NET TransactionScope vs ExecuteCommand的高容量站点,直接READ UNCOMMITTED?

只需阅读Omar在他的博客Linq上的这篇有趣的文章,使用未提交的读取解决事务死锁和查询超时问题,最后Javed Hasan开始与他讨论他在高容量网站上解决nolock情况的问题.

在这里,试图解决的问题是,从sql意义上我们需要使用带有NOLOCK的Select语句或使用SET TRANSACTION LEVEL READ UNCOMMITTED,否则在DB中的高容量行将被锁定并导致错误.Omar使用的技术是Linq2Sql,所以问题是我们如何在你的C#数据访问代码中实现这一点,所以上述情况不会发生?

基本上在帖子中,Omar通过在现实世界网站上使用SqlProfiler等工具进行工作和测试来解决他的问题,而Javed Hasan则使用MSDN文档和Scott Hanselman的博客文章等来解决他的问题.

奥马尔建议使用以下内容

using (var db = new DropthingsDataContext2())
{
  db.Connection.Open();
  db.ExecuteCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");

  var user = db.aspnet_Users.First();
  var pages = user.Pages.ToList();
}
Run Code Online (Sandbox Code Playgroud)

而Javed Hasan表示

using (new TransactionScope(TransactionScopeOption.Required, 
  new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
 //Your db Operation
}
Run Code Online (Sandbox Code Playgroud)

我非常有兴趣知道你们在这个特定问题上你们在StatckOverflow这样的高容量网站上做了什么,或者杰夫和他们的家伙在这方面做了什么?

编辑:在阅读完第一篇文章后,我想在奥马尔的帖子中指出一些内容.

  1. 他的方法确实遇到了连接问题,但是他解决了这个问题,看到了他的帖子.
  2. 更重要的是,他提到他尝试使用ADO.NET Transaction方式,甚至尝试了Scott Hanselman在他的博客上写的内容,但它不适用于高容量网站,它会降低性能.Omar说这个"System.Transactions有很大的开销.我从来没有能够在高容量网站上使用它而不会使CPU达到100%而Req/sec降到1/10.它是为企业应用程序而不是高卷网站."

sql-server nolock transactionscope read-uncommitted linq-to-sql

5
推荐指数
2
解决办法
5446
查看次数

C#params关键字和函数重载

在.net框架中,我经常看到如下所示的重载函数,

  1. public void Log(string message)...
  2. public void Log(string message, params object[] args)...

我的问题是,因为params关键字允许零个或多个参数,我们可以摆脱第一个签名吗?只有第二个签名,我可以调用它没有像下面这样的参数,所以我不知道为什么他们会有第一个签名?

Log("calling with no param");
Run Code Online (Sandbox Code Playgroud)

c# parameters overloading

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

每次运行测试时,Visual Studio 2012都会崩溃并重新启动

我的解决方案中有一个单元测试项目,每次运行测试时,我的vs2012都会崩溃并重新启动.

基本上测试结束然后弹出窗口显示Microsoft Visual Studio已停止工作,然后另一个框出现说MS VS正在重新启动.

有没有人遇到这个问题,有没有人知道如何解决这个问题?我真的很感激任何帮助.

编辑:我试图卸载插件以及重置我的vs环境,没有帮助.每当我打开测试资源管理器时,也会发生这种情况.

编辑:我认为它是Web Essential插件,因为它在我卸载后工作,并在我安装它时停止工作.现在,问题又回来了,我不知道怎么回事,但没有安装插件就回来了.

visual-studio visual-studio-2012

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

Asp.net Core 2.1 Identity的LockoutEnabled属性实际上是什么?

我使用的是Asp.net Core 2.1 Identity,并且有一个名为“ LockoutEnabled ” 的属性,我认为此标志可以确定用户是否被锁定。但是医生说是

“指示用户是否可以被锁定的标志”

那么,此属性的作用是什么?锁定功能实际上是在此版本的库中实现的吗?谢谢。

asp.net-identity asp.net-core asp.net-core-identity

5
推荐指数
2
解决办法
2445
查看次数

分别在2列上建立索引和在每列上建立索引之间有什么区别?

我是数据库索引的新手,如果我在表中有2列是很好的索引选择,例如,

[Posts](    
   [PostID] [int] IDENTITY(1,1) NOT NULL,
   [UserName] [nvarchar](64) NOT NULL,
   [ApplicationType] [smallint] NOT NULL,
   ...
)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,PostID将是PRIMARY KEY CLUSTERED索引,然后我想做更多的索引,因为它是一个大表,我想对UserName和ApplicationType做,现在我应该单独索引每个(一个在UserName上,一个在ApplicationType上)或将它们作为一个整体索引(UserName上的一个索引,ApplicationType一起)?在进行不良练习之前,我可以拥有的索引数量是否有限制?对此有什么一般的经验法则?

谢谢,

射线.

indexing database-design

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

如何在Visual Studio 2010中为CSS文件启用错误检测?

如何在Visual Studio 2010中为CSS文件启用错误检测?它据说是工具选项,但我似乎无法找到它.

css visual-studio

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

静态内部类是否有性能成本?

静态内部类是否有性能成本?或者我应该只编写与非内部类相同的静态类?

c# performance inner-classes static-class

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

针对Azure表存储的空表查询

我正在使用Azure表存储.当我使用PartitionKey和RowKey以外的参数查询一个空表时,我得到一个异常.当我至少有一行时,不会出现异常.如果我只使用PartitionKey和RowKey查询空表,那就没问题.

我当然不想再做一次往返测试表是否为空.人们通常如何解决这个问题?是否有一种高效的方法来快速检查表是否为空?

我正在使用开发存储,正如我刚才看到的那样,在开发存储的情况下报告了错误,并且错误在生产中消失了.但是,我不想仅仅为开发存储保留自定义代码,是否有一种解决此问题的好方法,因此我可以在本地以及生产云环境中运行相同的代码?

azure azure-storage azure-table-storage

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

如何从浏览器中清除 Blazor WebAssembly DLL?

我不小心在 https://localhost:44381 的同一个端口上运行了两个示例 Blazor WebAssembly 应用程序,然后事情就搞砸了。其中一个应用程序出错,因为它尝试从另一个示例应用程序加载 DLL 失败。我尝试转到浏览器的 devtool Application > Clear storage,但没有帮助。如何从浏览器中完全清除 Blazor WebAssembly 应用程序的 DLL,以便我可以重新开始?

asp.net-core blazor blazor-webassembly

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