Ich verwende ConFORM Nhibernate in einem meiner MVC-Projekt. Und hatte ein Problem mit One to Many Mappings.ConFORM Nhibernate OneToManyKeyColumnApplier Problem
IEnumerable<Type> domainEntities = this.GetDomainEntities();
var relationalMapper = new ObjectRelationalMapper();
relationalMapper.TablePerConcreteClass(domainEntities);
relationalMapper.Patterns.PoidStrategies.Add(new NativePoidPattern());
relationalMapper.Cascade<Category, Product>(Cascade.All);
relationalMapper.ManyToMany<Category, Product>();
relationalMapper.Cascade<Order, Product>(Cascade.Persist);
var mapper = new Mapper(relationalMapper);
var englishInflector = new EnglishInflector();
mapper.PatternsAppliers.Merge(new ClassPluralizedTableApplier(englishInflector));
mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper));
.....
HbmMapping mapping = mapper.CompileMappingFor(domainEntities);
Und Klassen Bestellung und Benutzer: Ein Benutzer hatte viele Bestellungen.
public class Order : BaseEntity
{
public Order(User user)
{
if (user == null)
{
throw new ArgumentNullException("user");
}
this.User = user;
}
protected Order()
{
}
public virtual User User { get; protected set; }
}
Und Benutzer:
public class User : BaseEntity
{
public User()
{
this.Orders = new HashedSet<Order>();
}
public virtual string FirstName { get; set; }
public virtual ISet<Order> Orders { get; protected set; }
}
Ich erwarte, dass die Beziehungen wie folgt aus: Orders.UserId -> User.Id im DB. Aber wenn der Nhibernate genereted hatte DB hatten wir dieses Problem (siehe Bild):
UPS. Double Referenz User und UserId plötzlich erhöht. Und wenn wir [Benutzer] entfernt haben, kann Nhivernate nicht innerlich an diesen Tabellen teilnehmen. Es ist traurig, dass doppelte Zeit: Ungültiger Spaltenname 'Benutzer'. Ungültiger Spaltenname 'Benutzer'.
Ich denke, es gibt einige Probleme mit der Einrichtung von ConFORM. Wenn ich mapper.PatternsAppliers.Merge (neue OneToManyKeyColumnApplier (relationalMapper)) entfernen; ConFORM generete nur [Benutzer] Referenzschlüssel.
Wer weiß, was das Problem hier ist? Vielen Dank im Voraus.