I can't help but feel I am missing something but to this day I cannot find the answer.
I am doing a model-first entity framework and have a few properties set as DateTime. These translate to DateTime in the database - but I would like to use SmallDateTime. In m开发者_如何学Goy case, getting down to seconds and milliseconds just isn't worth the double storage for as many rows as I will have.
Does anyone know a way in the model-first environment to map DateTime to a SmallDateTime DB field? As a last hope, I can generate the DDL, replace all, and update the Model from the database after - but I feel that is obnoxious!
Thanks in advance.
It's a kind of tricky thing.
First of all read this article Model first if you have not yet.
Then create separate class library project with custom IGenerateActivityOutput
implementation.
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;
}
}
}
The next step is to modify database generation workflow.
- Locate TablePerTypeStrategy.xaml in your file system.
- Copy this file to the same folder with different name. TablePerTypeStrategy_smalldatetime.xaml for example. Open it with VS.
- Change
OutputGeneratorType
ofCsdlToSsdlAndMslActivity
to"MyCSDLToSSDL.MyCsdlToSsdl, MyCSDLToSSDL"
. Double quotes are required. - Change database generation workflow property to "TablePerTypeStrategy_smalldatetime.xaml (VS)".
- Try to generate database from model.
Looks very much like a workaround but it works. :) Hope it helps!
精彩评论