Для извлечения данных из таблицы данных используйте метод расширения .Field
из System.Data.DataSetExtensions
. Пожалуйста, смотрите документацию DataRow.Field .
Вам необходимо создать список типа PurchaseInvoice
и выполнить итерацию по коллекции DataRow
table.Rows
.
См. Пример ниже:
// create a list for your invoices
List invoices = new List();
foreach (DataRow row in dtPurchaseInvoice.Rows)
{ // ^ Rows
// create invoice
PurchaseInvoice invoice = new PurchaseInvoice();
// get an int
invoice.PurchaseInvoiceNo = row.Field("PurchaseInvoiceNo");
// get a string
invoice.CustomerName = row.Field("CustomerName");
// get a DateTime
invoice.PurchaseDate = row.Field("PurchaseDate");
// get a double
invoice.PurchaseValue = row.Field("PurchaseValue");
// add invoice to list
invoices.Add(invoice);
}
Использование расширения .Field
означает, что вам не нужно преобразовывать / приводить объект в правильный тип - он обрабатывается расширением для вас.
Он также работает с пустыми полями:
DateTime? date = row.Field("PurchaseDate");
Обратный атрибут не должен иметь значение true...
Вы используете обратный атрибут для определения 'владельца' ассоциации. (Ассоциация может иметь только одного владельца, таким образом, один конец должен быть установлен на инверсию, другой должен быть установлен на 'не обратный'). (Владелец: inverse=false
; Невладелец: inverse=true
)
В one-many ассоциации, если Вы не отмечаете набор как обратный конец, затем NHibernate выполнит дополнительное ОБНОВЛЕНИЕ. На самом деле, в этом случае, NHibernate сначала вставит объект, который содержится в наборе, при необходимости вставьте объект, который владеет набором, и впоследствии, обновляет 'объект набора', так, чтобы внешний ключ был установлен, и ассоциация сделана. (Обратите внимание, что это также означает, что внешний ключ в Вашем DB должен быть nullable).
Когда Вы отметите конец набора как 'инверсию', затем NHibernate сначала сохранит объект, который 'владеет' набором и сохранит объекты, которые находятся в наборе впоследствии, избегая дополнительного оператора UPDATE.
Так, в двунаправленной ассоциации у Вас всегда есть один обратный конец.
В дополнение к ответу выше , и, как я понимаю, вам необходимо вручную сохранить значение внешнего ключа в коллекции, то есть если вы не хотите дополнительный оператор обновления:
Parent par = Session.Get<Parent>(8);
Child ch = new Child();
ch.Name = "Emad";
//set the parent foreign key manually
ch.MyParent = par;
par.MyChildren.Add(ch);
Session.Save(par);
для дальнейшего объяснения обратного атрибута, проверьте следующий пост:
http://www.emadashi.com/index.php/2008/08/nhibernate-inverse-attribute/