/// <summary> /// DB項目種別変更を生成したすべてのインスタンスに反映する。 /// 更新された項目は、 /// <list type="bullet"> /// <item>値種別が変化した場合はデフォルト値で初期化される。</item> /// <item>値種別が変化しなかった場合は値の変更は起こらない。ただしNotifyPropertyChangedイベントは発火する。</item> /// </list> /// </summary> /// <param name="itemId">項目ID</param> /// <param name="type">変更後の値種別</param> public void ReflectChangedValueType(ItemId itemId, DBItemType type) { Refresh(); // タイプ変化チェックメソッド 後のロジックのため匿名関数にする Func <DBItemValueList, bool> typeCheckFunc = target => target[itemId].Type == type; var isSameType = false; foreach (var reference in MadeInstanceList) { if (!reference.TryGetTarget(out var target)) { continue; } // タイプ変化チェックは最初の1回だけ行えばいい // 要素変更イベントを発火するため、タイプ変化していない場合でも要素を上書きする。 if (!(typeCheckFunc is null)) { isSameType = typeCheckFunc.Invoke(target); typeCheckFunc = null; } target[itemId] = isSameType ? target[itemId] : type.DBItemDefaultValue; } }
/// <summary> /// 指定した値種別が設定可能かどうかを判定する。 /// </summary> /// <param name="type">[NotNull] 値種別</param> /// <returns>設定可能な場合true</returns> /// <exception cref="ArgumentNullException">typeがnullの場合</exception> public override bool CanSetItemType(DBItemType type) { if (type is null) { throw new ArgumentNullException( ErrorMessage.NotNull(nameof(type))); } return(type == DBItemType.Int); }
/// <summary> /// DB項目追加を生成したすべてのインスタンスに反映する。 /// 追加された項目はデフォルト値で初期化される。 /// </summary> /// <param name="type">値種別</param> public void ReflectAddValueType(DBItemType type) { Refresh(); foreach (var reference in MadeInstanceList) { if (!reference.TryGetTarget(out var target)) { continue; } target.AddForValuesListInstanceManager(type.DBItemDefaultValue); } }
protected DBItemValue(SerializationInfo info, StreamingContext context) { Type = DBItemType.FromCode(info.GetInt32(nameof(Type))); intValue = info.GetInt32(nameof(intValue)); stringValue = info.GetValue <DBValueString>(nameof(stringValue)); }