2009-11-05 3 views
0

Я пытаюсь сопоставить интерфейс и конкретный класс с fluentnhibernate.Сопоставление интерфейса и конкретного класса с 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»: l ooking для ... это не мой столбец идентификатора, но я не могу указать Id («my_id_column»); в SubclassMap

что я делаю неправильно?

ответ

2

Какую стратегию наследования вы пытаетесь сопоставить? Таблица для класса или иерархии таблицы за класс? Ваше текущее сопоставление подразумевает таблицу за класс.

В любом случае, я думаю, что что-то пошло не так. Object_id - это имя внешнего ключа, и оно должно быть построено путем просмотра имени родительского класса. Я предполагаю, что мы не рассматриваем интерфейс как «родителя».

Во-первых, я рекомендую вам поднять вопрос в нашем списке проблем или, может быть, попасть в список рассылки. Это будет немного больше на нашем радаре.

Во-вторых, вы можете попробовать явно указать имя столбца, но я не знаю, какие другие последствия могут возникнуть в родительской проблеме, о которой я упоминал. Чтобы указать его, вам просто нужно сделать KeyColumn("Id").

+0

с добавлением KeyColumn ("Id") моему дочернему элементу SubclassMap работал. Я также открою билет для проблемы object_id. спасибо, Джеймс! –

Смежные вопросы