我在我的一个ConfORM项目中使用了MVC Nhibernate。并且对一对多映射有问题。
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和User:一个用户有多个订单。
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; }
}我希望关系是这样的: DB中的Orders.UserId -> User.Id。但是当Nhibernate生成DB时,我们遇到了这个问题(见下图):

UPS。双重引用用户和UserId突然出现了。当我们删除用户Nhivernate时,Nhivernate不能进行内连接。它加倍地表示:无效列名'User‘。无效的列名'User‘。
我认为设置ConfORM有一些问题。如果我删除mapper.PatternsAppliers.Merge(新OneToManyKeyColumnApplier(relationalMapper));ConfORM只生成用户引用键。
有人知道问题出在哪里吗?提前谢谢。
发布于 2010-12-01 02:56:29
您需要添加以下应用程序
mapper.PatternsAppliers.Merge(new ManyToOneColumnApplier());这可能是因为列名在用户端更改了,但在订单端没有更改。
https://stackoverflow.com/questions/4315098
复制相似问题