Мне нужно было переопределить или заменить конструктор по умолчанию моих моделей для проекта, использующего подход базы данных в первую очередь.После некоторых исследований я нашел, что этот ответ является наиболее подходящим для достижения того, что я хотел: Переопределить или заменить конструктор по умолчанию при использовании первого подхода к базе данных .
Итак, не будучи экспертом, я пошелк моему ProjectModel.edmx и внутри я нашел два файла с расширением .tt, они назывались ProjectModel.Context.tt
и ProjectModel.tt
, поэтому я решил, что мне нужно отредактировать второй.
Пытаясь понять, как это работает, я нашел фрагмент кода, который, кажется, генерирует конструктор класса:
1 <#
2 var complexProperties = typeMapper.GetComplexProperties(complex);
3 var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(complex);
4
5 if (propertiesWithDefaultValues.Any() || complexProperties.Any())
6 {
7 #>
8 public <#=code.Escape(complex)#>()
9 {
10 <#
11 foreach (var edmProperty in propertiesWithDefaultValues)
12 {
13 #>
14 this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
15 <#
16 }
17
18 foreach (var complexProperty in complexProperties)
19 {
20 #>
21 this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
22 <#
23 }
24 #>
25 Init();
26 }
27
28 partial void Init();
29
30 <#
31 }
Я добавил строки 25 и 28, просто чтобы модель былагенерируется с помощью вызова Init () и метода, который будет объявлен после этого.
Теперь я перешел к ProjectModel.edmx
, который показывает диаграмму моей базы данных, я щелкнул правой кнопкой мыши по диаграммеи запустил Обновить модель из базы данных ... в меню.Затем я перешел на вкладку Обновить , выделил Таблицы и нажал Готово .Я ожидал, что новые сгенерированные файлы будут похожи на это:
namespace Project.Models.DB
{
using System;
using System.Collections.Generic;
public partial class Class1
{
public Class1()
{
this.Events = new HashSet<Event>();
Init();
}
partial void Init();
public int id { get; set; }
public string name { get; set; }
public string slug { get; set; }
public bool is_active { get; set; }
public System.DateTime date_created { get; set; }
public System.DateTime date_updated { get; set; }
public virtual ICollection<Event> Events { get; set; }
}
}
, но это не сработало, мне интересно, нужно ли мне что-то делать или я редактирую правильный файл.Любое руководство будет очень цениться.