次のコードがあります。
ICollection<Sample> samples = new Collection<Sample>();
samples.Add(sample1);
samples.Add(sample2);
Order record = scope.DbContext.Orders.AddNew(new Order
{
Name = GenerateName("Order"),
Samples = samples
});
サンプルを見ると、サンプル 1 とサンプル 2 の両方が含まれています。ただし、 Order の Samples に追加すると、 Samples は空です。Samples も ICollection 型です。空の ICollection に ICollection を追加するにはどうすればよいですか?
アップデート:
サンプルを印刷して記録したときの結果。中間のサンプル:
samples
Count = 2
[0]: {iVention.Lifescience.Test.ElectronicSignatureRepositoryTest.SignHierarchyTest.Sample one.2012-04-21 11:07:24}
[1]: {iVention.Lifescience.Test.ElectronicSignatureRepositoryTest.SignHierarchyTest.Sample two.2012-04-21 11:07:24}
record.Samples
{System.Data.Objects.DataClasses.EntityCollection<iVention.Database.Sample>}
[System.Data.Objects.DataClasses.EntityCollection<iVention.Database.Sample>]: {System.Data.Objects.DataClasses.EntityCollection<iVention.Database.Sample>}
Count: 0
IsReadOnly: false
更新 2:
AddNew のみがエンティティを追加しますが、これによりサンプルがサンプルから削除されるのはなぜですか?
public static TEntity AddNew<TEntity>(this IDbSet<TEntity> self, object fromValues) where TEntity : class
{
return self.Add(Create(self, fromValues));
}
AddNew に指定されたオブジェクト formValues では、Samples にはまだ 2 つのサンプルが含まれています。
次のように追加します。
public static TEntity Create<TEntity>(this IDbSet<TEntity> self, object fromValues) where TEntity : class
{
TEntity returnValue = self.Create();
var targetProperties = typeof(TEntity).GetProperties();
{
var targetProperty = targetProperties.Single(c => c.Name == property.Name);
if (targetProperty.CanWrite && property.GetIndexParameters().Length == 0)
{
if (targetProperty.PropertyType.IsGenericType && targetProperty.PropertyType.GetGenericTypeDefinition() == typeof(System.Collections.Generic.ICollection<>))
{
}
else
{
targetProperty.SetValue(returnValue, property.GetValue(fromValues, null), null);
}
}
return returnValue;
}
したがって、returnValue が ICollection の場合、returnValue には何も追加されません。returnValue のサンプルが空です。