我在我的一個MVC項目中使用了ConfORM Nhibernate。並有一對多映射的問題。ConfORM Nhibernate OneToManyKeyColumnApplier問題
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);
而類Order and User:One User have many orders。
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; }
}
和用戶:
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; }
}
我期望的關係是這樣的:Orders.UserId - > User.Id在DB。但是,當NHibernate的已經genereted DB我們有這個問題(見圖片):
UPS。 Double引用User和UserId突然升高。當我們刪除[用戶] Nhivernate不能做內部加入這張表。令人遺憾的是雙倍時間: 列名'User'無效。 列名'User'無效。
我認爲在設置ConfORM時存在一些問題。 如果我刪除mapper.PatternsAppliers.Merge(new OneToManyKeyColumnApplier(relationalMapper)); ConfORM generete只是[User]引用密鑰。
任何人都知道問題在這裏? 在此先感謝。