0

次のコードがあります。

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 のサンプルが空です。

4

0 に答える 0