Sql server 在模型优先实体框架中使用SmallDateType

Sql server 在模型优先实体框架中使用SmallDateType,sql-server,entity-framework,Sql Server,Entity Framework,我忍不住觉得我错过了什么,但直到今天我还是找不到答案 我正在做一个模型优先实体框架,并将一些属性设置为DateTime。这些转换为数据库中的DateTime,但我想使用SmallDateTime。在我的例子中,减少到几秒和几毫秒根本不值得为我将拥有的行数增加一倍的存储空间 有人知道在ModelFirst环境中如何将DateTime映射到SmallDateTime DB字段吗?作为最后的希望,我可以生成DDL,替换所有,并在之后从数据库更新模型——但我觉得这很讨厌 提前谢谢 这是一件棘手的事情 首

我忍不住觉得我错过了什么,但直到今天我还是找不到答案

我正在做一个模型优先实体框架,并将一些属性设置为DateTime。这些转换为数据库中的DateTime,但我想使用SmallDateTime。在我的例子中,减少到几秒和几毫秒根本不值得为我将拥有的行数增加一倍的存储空间

有人知道在ModelFirst环境中如何将DateTime映射到SmallDateTime DB字段吗?作为最后的希望,我可以生成DDL,替换所有,并在之后从数据库更新模型——但我觉得这很讨厌


提前谢谢

这是一件棘手的事情

首先,如果你还没有读过这篇文章

然后使用自定义
IGenerateActivityOutput
实现创建单独的类库项目

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Data.Entity.Design.DatabaseGeneration.OutputGenerators;
using System.Activities;

namespace MyCSDLToSSDL
{
    public class MyCsdlToSsdl: IGenerateActivityOutput
    {
        private CsdlToSsdl _generator;
        public MyCsdlToSsdl()
        {
            _generator = new CsdlToSsdl();
        }

        public T GenerateActivityOutput<T>(OutputGeneratorActivity owningActivity, NativeActivityContext context, IDictionary<string, object> inputs) where T : class
        {
            var str = _generator.GenerateActivityOutput<T>(owningActivity, context, inputs) as string;

            return str.Replace("Type=\"datetime\"", "Type=\"smalldatetime\"") as T;
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Microsoft.Data.Entity.Design.DatabaseGeneration.OutputGenerators;
使用系统活动;
命名空间MyCSDLToSSDL
{
公共类MyCsdlToSsdl:IGenerateActivityOutput
{
专用CsdlToSsdl_发生器;
公共MyCsdlToSsdl()
{
_生成器=新的CsdlToSsdl();
}
公共T GenerateActivityYoutPut(OutputGeneratorActivityOwningActivity、NativeActivityContext上下文、IDictionary输入),其中T:class
{
var str=_generator.GenerateActivityOutput(拥有活动、上下文、输入)作为字符串;
将str.Replace(“Type=\“datetime\”,“Type=\“smalldatetime\”)返回为T;
}
}
}
下一步是修改数据库生成工作流

  • 在文件系统中找到TablePerTypeStrategy.xaml
  • 将此文件复制到具有不同名称的同一文件夹中。例如,TablePerTypeStrategy_smalldatetime.xaml。用VS打开它
  • csdltossdl和mslactivity
    OutputGeneratorType
    更改为
    “MyCSDLToSSDL.MyCSDLToSSDL,MyCSDLToSSDL”
    。双引号是必需的
  • 将数据库生成工作流属性更改为“TablePerTypeStrategy\u smalldatetime.xaml(VS)”
  • 尝试从模型生成数据库

  • 看起来很像一个解决办法,但它很有效。:)希望有帮助

    谢谢你的回答。无论是这样做的方式,以及链接到一篇文章,让我了解更多。赏金当之无愧:)实际上我有一个问题-我在.NET引用中似乎缺少了Microsoft.Data.Entity.Design.DatabaseGeneration.OutputGenerators。我有实体电源组。还有什么我需要的吗?它在VS2010安装文件夹[安装文件夹]\Microsoft Visual Studio 10.0\Common7\IDE中