Как сопоставить столбец внешнего ключа в nhibernate? - PullRequest
2 голосов
/ 21 мая 2009

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

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);

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

Ответы [ 3 ]

1 голос
/ 30 декабря 2009

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

Post post = new Post 
{ 
   Content = "content", 
   Category = Session.Load<Category>(categoryId)
};

session.Save(post);
0 голосов
/ 22 мая 2009

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

0 голосов
/ 21 мая 2009

Ваша сущность "Post" не нуждается ни в CategoryId, ни в свойстве Category.

Как правило, вы также сопоставляете категорию, и ваше сопоставление постов связывает их с помощью внешнего ключа.

Тогда вы можете попробовать что-то подобное

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

Надеюсь, это поможет.

...