我的应用程序定义了以下类型
public interface IUser {
int Id { get; set; }
int UserName { get; set; }
}
public class User : IUser {
public virtual int Id { get; set; }
public virtual string UserName { get; set; }
}
User类可以流畅地映射,如:
public class UserMap : ClassMap<User> {
public UserMap() {
Table("Users");
Id(x => x.Id);
Map(x => x.UserName);
}
}
我想创建IUser的另一个实现,但我有几个限制:
例如,这是我的新课程:
public class CustomUser : IUser {
public virtual int Id { get; set; }
public virtual string UserName { get; set; }
public virtual string Name { get; set; }
}
映射如下:
public class CustomUserMap : ClassMap<CustomUser> {
public CustomUserMap() {
Table("Users");
Id(x => x.Id);
Map(x => x.UserName);
Map(x => x.Name);
}
}
我遇到的第一个问题是它不喜欢要映射两次的相同接口。我通过在Application_Start事件中添加一些代码来克服这个问题,只有在没有CustomUserMap类的情况下才添加UserMap类。
但是我很快遇到了我的下一个问题,如果我在另一个类型中添加对IUser接口的引用,则会抛出错误:
表博客中的关联是指未映射的类:IUser
我可能会发生完全错误的事情,如果有人能告诉我我做错了什么,我会很感激。感谢
答案 0 :(得分:0)
如果您希望它们映射到同一个表,为什么不继承用户?这也将实现IUser接口。
为了防止重复选择(在获取User时,它可能在第二次往返中获取CustomerUser),您需要在User类上指定显式多态。在hbm文件中,这将是polymorphism =“explicit”,不知道流利的nhibernate。