Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit c9bdf79

Browse files
committed
Fix NRE when saving Poco with null references
1 parent 8ba9da5 commit c9bdf79

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

src/ServiceStack.OrmLite/OrmLiteReadExtensions.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -761,12 +761,15 @@ public static void SaveAllReferences<T>(this IDbCommand dbCmd, T instance)
761761
var refField = GetRefFieldDef(modelDef, refModelDef, refType);
762762

763763
var results = (IEnumerable)fieldDef.GetValue(instance);
764-
foreach (var oRef in results)
764+
if (results != null)
765765
{
766-
refField.SetValueFn(oRef, pkValue);
767-
}
766+
foreach (var oRef in results)
767+
{
768+
refField.SetValueFn(oRef, pkValue);
769+
}
768770

769-
dbCmd.CreateTypedApi(refType).SaveAll(results);
771+
dbCmd.CreateTypedApi(refType).SaveAll(results);
772+
}
770773
}
771774
else
772775
{
@@ -775,9 +778,11 @@ public static void SaveAllReferences<T>(this IDbCommand dbCmd, T instance)
775778
var refField = GetRefFieldDef(modelDef, refModelDef, fieldDef.FieldType);
776779

777780
var result = fieldDef.GetValue(instance);
778-
refField.SetValueFn(result, pkValue);
779-
780-
dbCmd.CreateTypedApi(refType).Save(result);
781+
if (result != null)
782+
{
783+
refField.SetValueFn(result, pkValue);
784+
dbCmd.CreateTypedApi(refType).Save(result);
785+
}
781786
}
782787
}
783788
}

tests/ServiceStack.OrmLite.Tests/LoadReferencesTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,5 +325,20 @@ public void Can_SaveAllReferences_then_Load_them()
325325
Assert.That(dbCustomer.PrimaryAddress, Is.Not.Null);
326326
Assert.That(dbCustomer.Orders.Count, Is.EqualTo(2));
327327
}
328+
329+
[Test]
330+
public void Can_save_with_null_references()
331+
{
332+
var customer = new Customer
333+
{
334+
Name = "Customer 1",
335+
PrimaryAddress = null,
336+
Orders = null,
337+
};
338+
339+
db.Save(customer, references: true);
340+
341+
Assert.That(customer.Id, Is.GreaterThan(0));
342+
}
328343
}
329344
}

0 commit comments

Comments
 (0)