Критерий Nhibernate - выберите строки в таблице A TypeId, определенного в таблице B - PullRequest
0 голосов
/ 17 августа 2011

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

У меня есть три таблицы, скажем, велосипеды, владельцы и таблица отношений (что-то вроде многих ко многим), которая определяет всех владельцев велосипеда или все велосипеды владельца.

enter image description here

Итак, я хочу выбрать все велосипеды OwnerId 1 Но мое отображение выглядит так:

BikeOwners references one Bike
BikeOwners References one OWner

Как мне написать критерий в nhibernate для этого?

Сейчас я пытаюсь:

            DetachedCriteria crit = DetachedCriteria.For<Bikes>()
            .Add(Expression.Eq("OwnerId", _ownerId));

и он ошибочно говорит, что в таблице Bikes нет OwnerId, что я понимаю ..

Надеюсь, вопрос ясен. Если вам нужны какие-либо детали, пожалуйста, спросите!


Я знаю, что могу сначала получить список всех идентификаторов велосипедов из таблицы Bike owner, а затем использовать этот массив int, чтобы получить все велосипеды в таблице bikes - НО - это два доступа к базе данных, и я делаю это вручную , должен быть способ сделать это за один раз, верно? Это мой план б, если ничего не поможет, я сделаю это. Спасибо

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Если в таблице BikeOwners больше столбцов, их вообще не следует представлять в модели предметной области. Велосипед и Владелец должны быть сопоставлены как отношения «многие ко многим». Кроме того, я нахожу необычным то, что велосипед может иметь нескольких владельцев.

1 голос
/ 17 августа 2011

Это действительно зависит от ваших сущностей. Я смоделировал образец сущности, просто перенеси его к себе.

public class Bike
{
    public int BikeId;
    public IList<BikeOwners> BikeOwners;
    public string BikeName;
}

public class Owners
{
    public int OwnerId;
    public IList<BikeOwners> OwnersBikes;
    public string OwnerName;
}

public class BikeOwners
{
    public int Id;
    public Owners owner;
    public Bikes bike;
}

Теперь вы напишите свой критерий nhibernate следующим образом:

DetachedCriteria crit = DetachedCriteria.For<Bikes>()
    .CreateCriteria("BikeOwners") //from Bikes class
    .CreateCriteria("owner")   // from BikeOwners class
    .Add(Expression.Eq("OwnerId", _OwnerId)); //from Owners class

очевидно, вам нужно изменить его на ваши сущности и имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...