Используйте SmallDateType в Model-First Entity Framework - PullRequest
3 голосов
/ 17 июня 2010

Я не могу не чувствовать, что что-то упустил, но по сей день я не могу найти ответ.

Я делаю платформу сущности, основанную на модели, и мне присвоено несколько свойств DateTime.Они переводят в DateTime в базе данных - но я хотел бы использовать SmallDateTime.В моем случае сокращение до секунд и миллисекунд просто не стоит двойного хранения для такого количества строк, которое у меня будет.

Кто-нибудь знает способ отображения среды DateTime в поле базы данных SmallDateTime в среде, ориентированной на модель?В качестве последней надежды я могу сгенерировать DDL, заменить все и обновить модель из базы данных после этого - но я чувствую, что это неприятно!

Заранее спасибо.

1 Ответ

3 голосов
/ 25 июня 2010

Это какая-то хитрая вещь.

Прежде всего, прочитайте эту статью Модель сначала , если вы еще этого не сделали.

Затем создайте отдельный проект библиотеки классов с пользовательской реализацией 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;
        }

    }
}

Следующий шаг - изменение рабочего процесса создания базы данных.

  1. Найдите TablePerTypeStrategy.xaml в вашей файловой системе.
  2. Скопируйте этот файл в ту же папку с другим именем.TablePerTypeStrategy_smalldatetime.xaml, например.Откройте его с помощью VS.
  3. Измените OutputGeneratorType из CsdlToSsdlAndMslActivity на "MyCSDLToSSDL.MyCsdlToSsdl, MyCSDLToSSDL".Требуются двойные кавычки.
  4. Измените свойство рабочего процесса создания базы данных на "TablePerTypeStrategy_smalldatetime.xaml (VS)".
  5. Попробуйте сгенерировать базу данных из модели.

Очень похоже на обходной путь, но это работает.:) Надеюсь, поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...