Je rencontre un certain nombre de problèmes pour tenter de mapper des entités à l'aide de NHibernate fluide.Fluent NHibernate: Comportement de mappage de colonne bizarre
J'ai trois entités, comme celui-ci:
public class Product
{
public virtual Guid Id { get; set; }
public virtual Category Category { get; set; }
public virtual Seller Seller { get; set; }
}
public class Seller
{
public virtual Guid Id { get; set; }
public virtual IList<Product> Products { get; set; }
}
public class Category
{
public virtual int Id { get; set; }
}
Notez que la catégorie utilise un int pour son ID, alors que les autres classes utilisent Guids.
Mes cours de cartographie ressemblent à ceci:
public sealed class ProductDbMap : ClassMap<Product>
{
public ProductDbMap()
{
Id(x => x.Id);
References(x => x.Seller)
.Not.Nullable();
References(x => x.Category, "Category")
.Nullable();
}
}
public sealed class SellerDbMap : ClassMap<Seller>
{
public SellerDbMap()
{
Id(x => x.Id);
HasMany(x => x.Products);
}
}
public sealed class CategoryDbMap : ClassMap<Category>
{
public CategoryDbMap()
{
Id(x => x.Id);
}
}
Enfin, je la convention suivante, qui précise comment les colonnes id de référence doivent être nommés:
public class ReferenceConventions : IReferenceConvention
{
public bool Accept(IManyToOnePart target)
{
return true;
}
public void Apply(IManyToOnePart target)
{
target.ColumnName(target.Property.Name + "Id");
}
}
Voici comment NHibernate décide de générer les tables:
create table Product (
Id UNIQUEIDENTIFIER not null,
SellerId UNIQUEIDENTIFIER not null,
CategoryId INTEGER,
Seller_id UNIQUEIDENTIFIER,
primary key (Id)
)
create table Seller (
Id UNIQUEIDENTIFIER not null,
primary key (Id)
)
create table Category (
Id integer,
primary key (Id)
)
Il y a quelques erreurs avec le gener ation de la table Product:
- La colonne "SellerId" est dupliquée pour une raison quelconque; la colonne en double ne suit pas ma convention de nommage.
- J'essaie de remplacer ma convention de dénomination pour la colonne "CategoryId", en fournissant une valeur de "Category" à la méthode References. Cependant, la table utilise toujours la convention à la place.
Que se passe-t-il?