2009-05-21 5 views
2

На самом деле вопрос сложнее, чем описано. Я новичок в nhibernate, и я хочу сопоставить таблицу с столбцами внешнего ключа. В большинстве образцов nhibernate назначения столбцов внешнего ключа обычно реализуются путем установки указанного объекта. Я имею в виду, если у меня есть столбец CategoryId, мне нужно свойство Category, и в образцах, которые я смотрел, обычно задается свойство Category. В моем случае я не хочу устанавливать свойство entity, а не свойство внешнего ключа.Как сопоставить столбцы внешнего ключа в nhibernate?

public class Post 
{ 
    public virtual long Id { get; set; }; 
    public virtual string Content { get; set; }; 
    public virtual long CategoryId { get; set; }; 
    public virtual Category Category { get; set; }; 
} 

Я не хочу устанавливать свойство категории, когда пытался сохранить объект Post, как пример ниже.

Post post = new Post { Content = "content", Category = aCategoryEntity }; 
session.Save(post); 

Образец ниже - это способ, которым я хочу реализовать.

Post post = new Post { Content = "content", CategoryId = 3 }; 
session.Save(post); 

Как я могу избавиться от этого?

+0

Если вы все еще застряли, почему бы и не опубликовать ваше картографирование. –

ответ

1

Session.Load было решением, которое я использовал здесь.

0

Ваше лицо «Почта» не нуждается в свойствах CategoryId и категории.

Как правило, вы также могли бы отображать категорию, а ваше сопоставление Post связывает два, используя внешний ключ.

Вы могли бы попробовать что-то вроде этого, то

session.Save(new Post(){ Category = new Category(){ Id = 3 } }); 

Надеется, что это помогает.

+0

Ваше предложение в моем уме, но я ищу точное решение для этого. Кстати, я использую fluent-nhibernate для сопоставлений. Я предполагаю, что есть способ или что-то еще, что я пропустил, что может сделать что-то подобное. –

+0

Вам нужно подумать о ответе Лиама. Код не имеет способа узнать, действителен ли идентификатор категории, поэтому он нарушит внешний ключ и выдаст исключение. –

+0

Обычно, когда вы чувствуете, что работаете против технологии, это потому, что вы есть. Если у вас есть возможность перепроектировать, чтобы вы могли работать с объектом Category как свойство Post, это сэкономит вам много головной боли. :) –

0

Я не знаю, возможно ли это для NHibernate. Вся суть ORM - это дело с объектами, а не с внешними ключами RDMS.

+0

Я знаю, это не лучшая практика, и это исключительно для ORM, но мне все равно нужно. –

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