开发者

Use SmallDateType in Model-First Entity Framework

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.

  1. Locate TablePerTypeStrategy.xaml in your file system.
  2. Copy this file to the same folder with different name. TablePerTypeStrategy_smalldatetime.xaml for example. Open it with VS.
  3. Change OutputGeneratorType of CsdlToSsdlAndMslActivity to "MyCSDLToSSDL.MyCsdlToSsdl, MyCSDLToSSDL". Double quotes are required.
  4. Change database generation workflow property to "TablePerTypeStrategy_smalldatetime.xaml (VS)".
  5. Try to generate database from model.

Looks very much like a workaround but it works. :) Hope it helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜