使用FluentNHibernate映射接口和具体类

时间:2009-11-05 03:16:23

标签: class fluent-nhibernate interface mapping

我正在尝试使用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中

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您尝试使用哪种继承策略?每个类的表或每个类的表层次结构?您当前的映射意味着每个表的表。

无论哪种方式,我认为出了问题。 Object_id是外键名称,它应该通过查看父类的名称来构建。我的猜测是我们不会将界面视为“父”。

首先,我建议您在我们的问题列表中提出问题,或者点击邮件列表。那里我们的雷达会更多。

其次,你可以尝试明确指定列名,但我不知道我提到的父问题可能有什么其他影响。要指定它,您只需要KeyColumn("Id")