Насколько я знаю, они идентичны. Я думаю, что там может быть несколько двигателей, которые не поддерживают пронумерованный синтаксис, но я не уверен, что. Я смутно вспоминаю вопрос о SO несколько дней назад, когда явное обозначение не работает в Notepad ++.
Единственный раз, когда я буду использовать явно пронумерованное повторение, - это когда повторение больше 1:
{2}
{2,}
{2,4}
Я предпочитаю это особенно, когда повторяющийся рисунок больше нескольких символов. Если вам нужно сопоставить 3 числа, некоторым людям нравится писать: \d\d\d
, но я бы предпочел написать \d{3}
, поскольку он подчеркивает количество повторений. Кроме того, по дороге, если это число когда-либо должно измениться, мне нужно только изменить {3}
на {n}
, а не повторно анализировать регулярное выражение в моей голове или беспокоиться о том, чтобы испортить его; это требует меньших умственных усилий.
Если эти критерии не выполнены, я предпочитаю сокращение. Использование «явной» записи быстро загромождает шаблон и затрудняет его чтение. Я работал над проектом, в котором некоторые разработчики не слишком хорошо знали регулярное выражение (это не совсем любимая тема для всех), и я видел много {1}
и {0,1}
случаев. Несколько человек попросят меня пересмотреть свой шаблон, и именно тогда я предлагаю изменить эти события на сокращенную нотацию и сэкономить место, а ИМО улучшить читаемость.
Я нашел исходный ответ обновления .edmx работы файла лучше всего в моей ситуации. Я просто не был слишком доволен изменением модели каждый раз, когда это было обновлено от базы данных. Вот почему я записал дополнительный текстовый Шаблонный файл, который автоматически вызывается, когда после того, как модель изменилась - точно так же, как объекты недавно сгенерированы. Я отправляю его здесь в этом комментарии. Чтобы заставить его работать, удостоверьтесь, что Вы называете его как {имя модели} .something.tt и храните его в той же папке как Ваша .edmx папка. Я назвал это {имя модели}.NonPkTables.tt. Это не генерирует файл самостоятельно из-за недопустимого определения расширения файла во второй строке. Не стесняйтесь использовать.
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ output extension="/" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Xml.Linq"#>
<#@ assembly name="%VS120COMNTOOLS%..\IDE\EntityFramework.dll" #>
<#@ assembly name="%VS120COMNTOOLS%..\IDE\Microsoft.Data.Entity.Design.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Windows.Forms" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Xml.Linq" #>
<#@ import namespace="System.Globalization" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Data.Entity.Core.Metadata.Edm" #>
<#@ import namespace="System.Data.Entity.Core.Mapping" #>
<#@ import namespace="System.CodeDom" #>
<#@ import namespace="System.CodeDom.Compiler" #>
<#@ import namespace="Microsoft.CSharp"#>
<#@ import namespace="System.Text"#>
<#@ import namespace="System.Diagnostics" #>
<#
string modelFileName= this.Host.TemplateFile.Split('.')[0] + ".edmx";
string edmxPath = this.Host.ResolvePath( modelFileName );
// MessageBox.Show( this.Host.TemplateFile + " applied." );
var modelDoc = XDocument.Load(edmxPath);
var root = modelDoc.Root;
XNamespace nsEdmx = @"http://schemas.microsoft.com/ado/2009/11/edmx";
XNamespace ns = @"http://schemas.microsoft.com/ado/2009/11/edm/ssdl";
var runtime = root.Elements(nsEdmx + "Runtime").First();
var storageModels = runtime.Elements(nsEdmx + "StorageModels").First();
XNamespace nsStore = @"http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator";
var schema = storageModels.Elements(ns + "Schema").First();
XNamespace nsCustomAnnotation = @"http://schemas.microsoft.com/ado/2013/11/edm/customannotation";
var entityTypes = schema.Nodes().OfType<XComment>().Where(c => c.Value.Contains("warning 6002: The table/view"));
bool changed = false;
foreach (var node in entityTypes)
{
var element = node.ElementsAfterSelf().First();
string entityName = element.Attribute("Name").Value;
// Find EntitySet in EntityContainer.
var entityContainer = schema.Elements(ns + "EntityContainer").First();
var entitySet = entityContainer.Elements(ns + "EntitySet").First(s => s.Attribute("Name").Value == entityName);
// Change "store:Schema" attribute to "Schema" attribute.
var attribute = entitySet.Attribute(nsStore + "Schema");
if (attribute != null)
{
string schemaName = entitySet.Attribute(nsStore + "Schema").Value;
entitySet.Attribute(nsStore + "Schema").Remove();
entitySet.Add(new XAttribute("Schema", schemaName));
changed |= true;
}
// Remove the DefiningQuery element.
var definingQuery = entitySet.Element(ns + "DefiningQuery");
if (definingQuery != null)
{
definingQuery.Remove();
changed |= true;
Debug.WriteLine(string.Format("Removed defining query of EntitySet {0}.", entityName));
}
}
if (changed)
modelDoc.Save(edmxPath);
#>