我情不自禁地觉得自己错过了一些东西,但直到今天我找不到答案。
我正在做一个模型优先实体框架,并将一些属性设置为DateTime。这些转换为数据库中的DateTime - 但我想使用SmallDateTime。在我的情况下,降低到几秒和几毫秒不值得双倍存储,因为我将拥有尽可能多的行。
有没有人知道在模型优先环境中将DateTime映射到SmallDateTime数据库字段的方法?作为最后的希望,我可以生成DDL,替换所有,并在数据库之后更新模型 - 但我觉得这是令人讨厌的!
提前致谢。
答案 0 :(得分:3)
这是一件棘手的事情。
首先阅读这篇文章Model first,如果你还没有。
然后使用自定义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;
}
}
}
下一步是修改数据库生成工作流程。
OutputGeneratorType
的{{1}}更改为CsdlToSsdlAndMslActivity
。双引号是必需的。看起来非常像一种解决方法,但它确实有效。 :) 希望能帮助到你!