Частная коллекция, отображающаяся в быстром nhibernate

Вы можете сделать его более прозрачным, используя буфер фиксированного размера:

[StructLayout(LayoutKind.Sequential)]
public unsafe struct Result
{
    public byte success;
    public ErrorCode error_code;
    public fixed sbyte error_path[1025];
}

Обратите внимание, что я использовал sbyte для типа элемента массива. Это 8-битный тип, который соответствует неуправляемому типу char, который также является 8-битным типом. Вы использовали char в своем C #, который является 16-битным типом.

Возможно, вам потребуется преобразовать буфер фиксированного размера в строку, но как именно это сделать, зависит от используемой вами кодировки. Тем не менее, существует множество статей на эту тему (преобразование буфера фиксированного размера в строку), которые можно найти с помощью веб-поиска.

7
задан Frederik Gheysels 23 April 2009 в 13:22
поделиться

2 ответа

The easiest solution is to expose your collection as a public property Orders instead of the GetAllOrders() method. Then your mapping is

HasMany(x => x.Orders)
    .Access.AsCamelCaseField(Prefix.Underscore);

and your class is

public class Customer
{
    private IList<Order> _orders = new List<Order>();

    public IEnumerable<Order> Orders 
    { 
        get { return _orders; }
    }
}

If that doesn't work for you, it is possible to map private properties using Fluent NHibernate's Reveal mapping.

Edited to add: Having just done this, the correct answer is:

HasMany<Order>(Reveal.Property<Customer>("_orders")) etc.

The collection must be exposed as a protected virtual property to allow proxying:

protected virtual IList<Order> _orders { get; set; }

This answer put me on the right track.

24
ответ дан 6 December 2019 в 06:51
поделиться

У меня есть значительный успех, когда я тестирую мой код PIC путем абстрагирования доступа к оборудованию и высмеивать это в моих тестах.

Например, Я абстрагирую PORTA с помощью

#define SetPortA(v) {PORTA = v;}

. Затем SetPortA можно легко смоделировать, не добавляя служебный код в версию PIC.

Как только аппаратная абстракция была протестирована некоторое время, я вскоре обнаружил, что в общем случае код переходит от тестового стенда к PIC и работает впервые.

Обновление:

Я использую шов #include для кода модуля, # включая код модуля в файле C ++ для тестовой установки и файл C для кода цели.

Как Например, я хочу мультиплексировать четыре 7-сегментных дисплея, один порт управляет сегментами, а второй выбирает дисплей. Код дисплея взаимодействует с дисплеями через SetSegmentData (char) и SetDisplay (char) . Я могу смоделировать их на своем тестовом стенде C ++ и проверить, получаю ли я ожидаемые данные. Your solution is fine. However, there could be situations(hypotetical) when you dont want to reveal your private collection. This mapping scenario is not explained in your linked post because there is difference between mapping simple propertie as descibed in that post and collection mapping. My attempt to use HasMany(x => Reveal.Propertie("_orders")) failed because of raised exception.

1
ответ дан 6 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: