开发者

Use SmallDateType in Model-First Entity Framework

开发者 https://www.devze.com 2023-01-03 16:50 出处:网络
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 DateTim

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

精彩评论

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

关注公众号