Свободный NHibernate: Соглашения / KeyColumn - PullRequest
1 голос
/ 18 октября 2011

Ниже кода Клиент может иметь несколько адресов. Существует отношение один ко многим. Я хотел бы в таблице адресов в качестве FK поле с именем «Customer», а не «Customer_id»

Я пытался добавить: .KeyColumn("Customer")> без изменений

Я пытался использовать для изменения ForeignKeyConvention без изменений.

Есть идеи?

public class CustomerMap : ClassMap<Customer>
{
    protected CustomerMap()
    {
        Id(x => x.Id).Not.Nullable();
        Map(x => x.FirstName).Not.Nullable().Length(25);
        Map(x => x.LastName);
        HasMany<Address>(x => x.Addresses)                
            .KeyColumn("Customer")
            .AsSet()
            .Inverse()
            .Cascade.AllDeleteOrphan();
    }
}

public class AddressMap : ClassMap<Address>
{
    public AddressMap()
    {
        Id(x => x.Id);
        Map(x => x.City).Not.Nullable().Length(100);
    }
}

public class ForeignKeyReferenceConvention : IHasManyConvention
{
    public void Apply(IOneToManyCollectionInstance instance)
    {
        instance.Key.PropertyRef("EntityId");
    }
}

public void DBCreation()
{
    FluentConfiguration config = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008.ConnectionString("...."))
        .Mappings(m =>
            m.AutoMappings
                .Add(AutoMap.AssemblyOf<Customer>())
                .Add(AutoMap.AssemblyOf<Address>()
                    .Conventions.Setup(c => c.Add<ForeignKeyReferenceConvention>())
                    )
                );

    config.ExposeConfiguration(
              c => new SchemaExport(c).Execute(true, true, false))
         .BuildConfiguration();
}

1 Ответ

0 голосов
/ 18 октября 2011

Я никогда не использовал автоматическое отображение, но разве ClassMap не используется только с отображением по умолчанию (не автоматическое)? Хотите использовать плавное отображение или автоматическое отображение?

Почему ваша обратная связь один-ко-многим, хотя у вас нет сопоставленной стороны многие-к-одному?

Кстати, какова цель этого соглашения? PropertyRef() не следует использовать, если в этом нет абсолютной необходимости (NHibernate не может выполнить некоторые оптимизации с этим).

...