Это какая-то хитрая вещь.
Прежде всего, прочитайте эту статью Модель сначала , если вы еще этого не сделали.
Затем создайте отдельный проект библиотеки классов с пользовательской реализацией 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;
}
}
}
Следующий шаг - изменение рабочего процесса создания базы данных.
- Найдите TablePerTypeStrategy.xaml в вашей файловой системе.
- Скопируйте этот файл в ту же папку с другим именем.TablePerTypeStrategy_smalldatetime.xaml, например.Откройте его с помощью VS.
- Измените
OutputGeneratorType
из CsdlToSsdlAndMslActivity
на "MyCSDLToSSDL.MyCsdlToSsdl, MyCSDLToSSDL"
.Требуются двойные кавычки. - Измените свойство рабочего процесса создания базы данных на "TablePerTypeStrategy_smalldatetime.xaml (VS)".
- Попробуйте сгенерировать базу данных из модели.
Очень похоже на обходной путь, но это работает.:) Надеюсь, поможет!