Я бы не советовал, но это можно сделать.
Создайте свои собственные атрибуты, которые соответствуют атрибутам SubSonics (например, OrmIgnore
вместо SubSonicIgnore
, все равно придется реализовать SubSonic.SqlGeneration.Schema.IClassMappingAttribute
или SubSonic.SqlGeneration.Schema.IPropertyMappingAttribute
или SubSonic.SqlGeneration.Schema.IRelationMappingAttribute
Посмотрите на этот код из SubSonic.Core \ Extensions \ Object.cs, чтобы понять, что происходит
public static ITable ToSchemaTable(this Type type, IDataProvider provider)
{
...
var typeAttributes = type.GetCustomAttributes(typeof(IClassMappingAttribute), false);
foreach (IClassMappingAttribute attr in typeAttributes)
{
if (attr.Accept(result))
{
attr.Apply(result);
}
}
...
// Now work with attributes
foreach (IPropertyMappingAttribute attr in attributes.Where(x => x is IPropertyMappingAttribute))
{
if (attr.Accept(column))
{
attr.Apply(column);
}
}
....
}
ваша реализация Apply должна изменить схему, чтобы сделатьчто вы хотите. Как этот (из SubSonicDefaultSettingAttribute):
public void Apply(IColumn column)
{
column.DefaultSetting = DefaultSetting;
}
Вы должны проверить источник SubSonic и пометить каждый пользовательский атрибут как устаревший
[Obsolete("Use OrmIgnore instead", true)]
[AttributeUsage(AttributeTargets.Property)]
public class SubSonicIgnoreAttribute : Attribute { }
Есть несколько прямых ссылок наатрибуты (которые не используют интерфейс), которые вам нужно исправить.
И вам придется искать строковые ссылки
private static bool ColumnIsIgnored(object[] attributes)
{
foreach (var att in attributes)
{
if (att.ToString().Equals("SubSonic.SqlGeneration.Schema.SubSonicIgnoreAttribute"))
{
return true;
}
}
return false;
}
с
private static bool ColumnIsIgnored(object[] attributes)
{
foreach (var att in attributes)
{
if (att.ToString().EndsWith("OrmIgnoreAttribute"))
{
return true;
}
}
return false;
}