小编ese*_*ura的帖子

如何避免向表中添加时间戳字段?

我有一个关于我们在许多解决方案中看到的每个记录的两个附加列(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")以及您可能想要添加的任何其他内容,例如"删除".

我想知道你对这个设计有什么看法.我最感兴趣的是最佳实践,有效和随着时间的推移而扩展.参考,链接,博客条目非常受欢迎.我知道至少有一项专利(待定)试图解决这个问题,但似乎目前细节尚未公开.

干杯,爱德华多

database timestamp

14
推荐指数
3
解决办法
3258
查看次数

这是使用ThenFetch()加载多个集合的正确方法吗?

我正在尝试使用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团队的人可以对此有所了解吗?谢谢

nhibernate orm fetching-strategy linq-to-nhibernate

9
推荐指数
2
解决办法
4720
查看次数

为什么EF5会在SaveChanges()次产生这些峰值?

我一直得到如下图所示的结果.我想知道我能做些什么来提高可预测性.我没有使用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"作为框架版本.

EFv5简单实体插入. 1000批100个实体

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)

c# performance sql-server-2008-r2 entity-framework-5

7
推荐指数
1
解决办法
512
查看次数