Mat*_*hew 5 .net c# nhibernate nhibernate-mapping fluent-nhibernate
我有以下数据库结构,我无法更改:
CREATE TABLE Users (
ID INT NOT NULL IDENTITY(1,1),
PRIMARY KEY(ID)
)
CREATE TABLE UserAvatars (
UserID INT NOT NULL,
Width INT NOT NULL,
Height INT NOT NULL,
PRIMARY KEY(UserID),
FOREIGN KEY(UserID) REFERENCES Users(ID),
)
Run Code Online (Sandbox Code Playgroud)
基本上,用户可以拥有零个或一个头像(我删除了列以简化示例)。
class User
{
public int ID { get; protected set; }
public UserAvatar Avatar { get; set; }
}
class UserAvatar
{
public User User { get; set; }
public int Width { get; set; }
public int Height { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下映射:
class UserMapping : ClassMapping<User>
{
public UserMapping()
{
Id(x => x.ID, m => {
m.Generator(Generators.Identity);
});
OneToOne(x => x.Avatar);
}
}
class UserAvatarMapping : ClassMapping<UserAvatar>
{
public UserAvatar()
{
Id(x => x.User, m =>
{
m.Generator(Generators.Foreign<User>(u => u.ID));
});
Property(x => x.Width);
Property(x => x.Height);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当尝试运行我的应用程序时,我得到一个NHibernate.MappingException:
NHibernate.MappingException:无法编译映射文档:mapping_by_code----> NHibernate.MappingException:无法确定类型:MyApp.Models.UserAvatar、MyApp,列:NHibernate.Mapping.Column(User)
我无法理解这个神秘的错误。
我如何完成User可能有零个或一个头像的映射?
ID 几乎对于 NHibernate (ORM) 映射的每个实体都很重要。所以,我们应该扩展 Avatar 类:
class UserAvatar
{
// every(stuff) should have its ID
public int ID { get; protected set; }
public User User { get; set; }
...
Run Code Online (Sandbox Code Playgroud)
ID值将通过一对一的关系来管理。那么,现在让我们调整映射。
public UserAvatar()
{
Id(x => x.ID);
HasOne(x => x.User)
.Constrained()
.ForeignKey();
...
public UserMapping()
{
Id(x => x.ID);
HasOne(s => s.Avatar).Cascade.All();
Run Code Online (Sandbox Code Playgroud)
相关且非常有趣的阅读: