Если все ваши объекты наследуются от ReferenceEntity, не хотите ли вы создать уникальное ограничение для свойства Name
для всех отображаемых объектов?
Но если вы хотите фильтровать по базовому классу сущности, вы можете это сделать. Используйте соглашение для добавления уникального ограничения в ваши отображения:
public class NameConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
// Check the entity base class type
if (instance.EntityType.BaseType.Name == "ReferenceEntity")
{
// Only add constraint to the .Name property
if (instance.Name == "Name")
{
instance.Unique();
}
}
}
}
Чтобы получить соглашение (и все другие соглашения в сборке), выбранные FNH, просто добавьте в эту строку настройку AutoMap
, указанную выше:
.Conventions.AddFromAssemblyOf<NameConvention>()
Алекс,
Нет, ответ не меняется. Вот пример, использующий соглашение выше.
public abstract class ReferenceEntity
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
}
public class User : ReferenceEntity
{
public virtual string Email { get; set; }
}
public class Item : ReferenceEntity
{
public virtual string Description { get; set; }
}
Это создает sql:
create table Users (
Id INTEGER not null,
Email TEXT not null,
Name TEXT not null unique,
primary key (Id)
)
create table Items (
Id INTEGER not null,
Description TEXT,
Name TEXT not null unique,
primary key (Id)
)
Пока это отдельные сущности, это создаст уникальное ограничение для свойства .Name для каждой сущности.