Быстрый NHibernate, работающий с интерфейсами

Я полагаю, вам следует подумать о построении структуры данных в виде разреженной матрицы вместо фрейма данных. Это можно сделать, например, с помощью пакета Matrix.

library(Matrix)
sparse_Matrix_output <- sparseMatrix(i = as.integer(dataframe$Country_a), j = as.integer(dataframe$Country_b), x = dataframe$Year_2000)
colnames(sparse_Matrix_output) = levels(dataframe$Country_b)
rownames(sparse_Matrix_output) = levels(dataframe$Country_a)

А вот и вывод:

sparse_Matrix_output
7 x 7 sparse Matrix of class "dgCMatrix"
          Brazil China France Mexico Mongolia New Zealand US
Argentina     30     .      .      .        .           .  .
Brazil         .     .      4      .        .           .  .
Cananda        .     .      .      .        .           .  5
China          .     .      .     54        .           .  .
France         .     .      .      .        7           .  .
Germany        .     4      .      .        .           .  .
US             .     .      .      .        .          67  .
31
задан harriyott 15 December 2010 в 09:34
поделиться

2 ответа

Я нахожу, что существуют веские основания для использования интерфейса вместо конкретного класса в качестве свойства.

Например, если ваш класс Field находился в отдельном проекте от класса Address, и у вас не было зависимости от проекта класса Address от проекта класса Field.

Есть и другие способы справиться с этой ситуацией, но самый простой способ часто заключается в том, чтобы попытаться сделать то, что Вы делаете, и объяснить NHibernate конкретному классу, который Вы хотите использовать для IAddress.

Теперь вы можете сделать это в свободном NHibernate, например так:

References(x => x.Address, "AddressId")
    .Class(typeof(Address);

К сожалению, вы не можете сделать это с HasMany или HasManyToMany. Я не уверен, что это вообще возможно из-за отсутствия хорошей ковариационной поддержки в C#.

36
ответ дан 27 November 2019 в 22:35
поделиться

На Вашем Объекте поля у Вас есть объект типа IAddress. Это могло быть реализовано любым количеством различных реализаций. С каким Вы спрашиваете, каждая реализация имела бы свое собственное отображение, которое представит какое-либо количество трудностей (невозможность?), чтобы NHibernate обработал.

Простой пример помог бы продемонстрировать. Скажите, что у Вас есть две реализации IAddress Address1 и Address2. Каждый из них сохраняется в их собственной таблице, tblAddress1, и tblAddress2. То, когда Вы пытаетесь загрузить свой Объект поля, весь NHibernate знает, - то, что у Вас есть что-то, что реализует IAddress, он не знает, какая реализация была сохранена. Как это знало бы который, отображаясь для использования для получения дочернего объекта для какого-либо данного поля?

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

5
ответ дан 27 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

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