我有一个关于我们在许多解决方案中看到的每个记录的两个附加列(timeCreated,timeLastUpdated)的问题.我的问题:有更好的选择吗?
场景:你有一个巨大的数据库(就表而言,而不是记录),然后客户来,并要求你为80%的表添加"时间戳".
我相信这可以通过使用单独的表(TIMESTAMPS)来完成.除了明显的时间戳列之外,该表还将具有正在更新的表的表名和主键.(我在这里假设您使用int作为大多数表的主键,但表名很可能必须是字符串).
想象一下这个基本情景.我们有两张桌子:
付款方式: - (你平时的记录)
TIMESTAMP: - {当前时间戳} + { TABLE_UPDATED,id_of_entry_updated,timestamp_type}
请注意,在此设计中,您不需要在本机支付对象中使用这两个"额外"列(顺便说一下,它可能通过您的ORM解决方案),因为您现在正在使用TABLE_UPDATED和编制索引id_of_entry_updated.此外,timestamp_type将告诉您条目是否用于插入(例如"1"),更新(例如"2")以及您可能想要添加的任何其他内容,例如"删除".
我想知道你对这个设计有什么看法.我最感兴趣的是最佳实践,有效和随着时间的推移而扩展.参考,链接,博客条目非常受欢迎.我知道至少有一项专利(待定)试图解决这个问题,但似乎目前细节尚未公开.
干杯,爱德华多
我正在尝试使用NHibernate 3 alpha 1热切地加载所有集合.我想知道这是否正确使用ThenFetch()?
具有多个名称的属性是集合.其他只是一个对象.
IQueryable<T> milestoneInstances = Db.Find<T, IQueryable<T>>(db =>
from mi in db
where mi.RunDate == runDate
select mi).Fetch(mi => mi.Milestone)
.ThenFetch(m => m.PrimaryOwners)
.Fetch(mi => mi.Milestone)
.ThenFetch(m => m.SecondaryOwners)
.Fetch(mi => mi.Milestone)
.ThenFetch(m => m.Predecessors)
.Fetch(mi => mi.Milestone)
.ThenFetch(m => m.Function)
.Fetch(mi => mi.Milestone)
.ThenFetchMany(m => m.Jobs)
.ThenFetch(j => j.Source)
;
Run Code Online (Sandbox Code Playgroud)
我想在NHibernate论坛上问这个问题,但不幸的是,我禁止访问google群组.我知道Fabio在这里,所以也许来自NHibernate团队的人可以对此有所了解吗?谢谢
我一直得到如下图所示的结果.我想知道我能做些什么来提高可预测性.我没有使用SqlBulkCopy,因为我需要利用EFv5的验证功能.
如果有人可以验证/反驳我的发现,那就太棒了.我的目标是摆脱两种尖峰.我正在提供以下源代码,以便您快速完成.您只需要一个VS中的类库项目,引用EFv5和NUnit,两者都可以通过NuGet获得.只需将此代码粘贴到Class1中,修改连接字符串并运行它即可.您可以使用下面的sql脚本重新创建表.
我正在使用.Net 4.5,EF 5,NUnit 2.6.1,在发布模式下运行代码,没有附加调试器.db是SqlServer 2008 R2.我使用64位模式的NUnit.exe运行测试,显示"Net 4.0"作为框架版本.

X轴是批号(总共1000批),Y轴是毫秒.您可以看到第一批需要大约30秒,这是因为dbContext是"冷"的.每批保存100个实体.
请注意,这个问题正在寻找这个答案中缺少的一些信息,它是EF保存中的抖动.
这是我正在使用的代码:
桌子:
CREATE TABLE [dbo].[Entity1](
[Id] [int] IDENTITY(1,1) NOT NULL,
[IntField] [int] NOT NULL,
[StrField] [nvarchar](50) NOT NULL,
[DateField] [datetimeoffset](7) NOT NULL,
CONSTRAINT [PK_Entity1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
课程:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics;
using NUnit.Framework;
namespace …Run Code Online (Sandbox Code Playgroud)