我正在尝试使用fluentnhibernate映射接口和具体类。
这是我的界面/类:
public interface IUser
{
int Id { get; set; }
}
public class User: IUser
{
public int Id { get; set; }
public string Name { get; set; }
public string Password { get; set; }
}
这是我的映射文件:
public class IUserMap: ClassMap
{
public IUserMap()
{
Table("User");
Id(u => u.Id)
.Column("Id")
.GeneratedBy.Native();
}
}
public class UserMap: SubclassMap
{
public UserMap()
{
Map(u => u.Name);
Map(u => u.Password);
}
}
我收到此错误:
could not execute query [ SELECT this_.Object_id as Id3_0_, this_.Name as Name4_0_, this_.Password as Password4_0_ FROM "User" this_ inner join User this_1_ on this_.Object_id=this_1_.Id WHERE this_.Name = @p0 ] Positional parameters: #0>test [SQL: SELECT this_.Object_id as Id3_0_, this_.Name as Name4_0_, this_.Password as Password4_0_ FROM "User" this_ inner join User this_1_ on this_.Object_id=this_1_.Id WHERE this_.Name = @p0]
...
注意它正在寻找的“this_.Object_id”列...这不是我的ID列,但是我不能指定Id(“my_id_column”);在SubclassMap中
我做错了什么?
答案 0 :(得分:2)
您尝试使用哪种继承策略?每个类的表或每个类的表层次结构?您当前的映射意味着每个表的表。
无论哪种方式,我认为出了问题。 Object_id
是外键名称,它应该通过查看父类的名称来构建。我的猜测是我们不会将界面视为“父”。
首先,我建议您在我们的问题列表中提出问题,或者点击邮件列表。那里我们的雷达会更多。
其次,你可以尝试明确指定列名,但我不知道我提到的父问题可能有什么其他影响。要指定它,您只需要KeyColumn("Id")
。