假设我想为社区网站设计一个包含博客,照片,论坛等的数据库,一种方法是单独列出"帖子"的概念,博客条目,博客评论,照片,照片评论,一个论坛帖子都可以被认为是一个帖子.所以,我可能有一个名为Post [PostID,PostType,Title,Body ....]的表,PostType将告诉它是什么类型的帖子.
或者我可以使用更多表格,BlogPost,PhotoPost,ForumPost来设计这一整个事情,并且我将使用CommentType列留下评论它自己的表.
或者为所有类型的帖子都有一个Post表,但是有一个单独的Comment表.
为了完整,我正在使用ADO.NET Entity Framework来实现我的DAL.
现在的问题是,如果我采用上述任何路线影响我的数据库性能和可管理性,中间层设计和代码清晰度,EF性能等,会产生什么影响?
非常感谢你!
射线.
只需阅读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这样的高容量网站上做了什么,或者杰夫和他们的家伙在这方面做了什么?
编辑:在阅读完第一篇文章后,我想在奥马尔的帖子中指出一些内容.
sql-server nolock transactionscope read-uncommitted linq-to-sql
在.net框架中,我经常看到如下所示的重载函数,
public void Log(string message)...public void Log(string message, params object[] args)...我的问题是,因为params关键字允许零个或多个参数,我们可以摆脱第一个签名吗?只有第二个签名,我可以调用它没有像下面这样的参数,所以我不知道为什么他们会有第一个签名?
Log("calling with no param");
Run Code Online (Sandbox Code Playgroud) 我的解决方案中有一个单元测试项目,每次运行测试时,我的vs2012都会崩溃并重新启动.
基本上测试结束然后弹出窗口显示Microsoft Visual Studio已停止工作,然后另一个框出现说MS VS正在重新启动.
有没有人遇到这个问题,有没有人知道如何解决这个问题?我真的很感激任何帮助.
编辑:我试图卸载插件以及重置我的vs环境,没有帮助.每当我打开测试资源管理器时,也会发生这种情况.
编辑:我认为它是Web Essential插件,因为它在我卸载后工作,并在我安装它时停止工作.现在,问题又回来了,我不知道怎么回事,但没有安装插件就回来了.
我使用的是Asp.net Core 2.1 Identity,并且有一个名为“ LockoutEnabled ” 的属性,我认为此标志可以确定用户是否被锁定。但是医生说是
“指示用户是否可以被锁定的标志”
那么,此属性的作用是什么?锁定功能实际上是在此版本的库中实现的吗?谢谢。
我是数据库索引的新手,如果我在表中有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一起)?在进行不良练习之前,我可以拥有的索引数量是否有限制?对此有什么一般的经验法则?
谢谢,
射线.
如何在Visual Studio 2010中为CSS文件启用错误检测?它据说是工具选项,但我似乎无法找到它.
静态内部类是否有性能成本?或者我应该只编写与非内部类相同的静态类?
我正在使用Azure表存储.当我使用PartitionKey和RowKey以外的参数查询一个空表时,我得到一个异常.当我至少有一行时,不会出现异常.如果我只使用PartitionKey和RowKey查询空表,那就没问题.
我当然不想再做一次往返测试表是否为空.人们通常如何解决这个问题?是否有一种高效的方法来快速检查表是否为空?
我正在使用开发存储,正如我刚才看到的那样,在开发存储的情况下报告了错误,并且错误在生产中消失了.但是,我不想仅仅为开发存储保留自定义代码,是否有一种解决此问题的好方法,因此我可以在本地以及生产云环境中运行相同的代码?
我不小心在 https://localhost:44381 的同一个端口上运行了两个示例 Blazor WebAssembly 应用程序,然后事情就搞砸了。其中一个应用程序出错,因为它尝试从另一个示例应用程序加载 DLL 失败。我尝试转到浏览器的 devtool Application > Clear storage,但没有帮助。如何从浏览器中完全清除 Blazor WebAssembly 应用程序的 DLL,以便我可以重新开始?
asp.net-core ×2
c# ×2
azure ×1
blazor ×1
css ×1
indexing ×1
linq-to-sql ×1
nolock ×1
oop ×1
overloading ×1
parameters ×1
performance ×1
sql-server ×1
static-class ×1