JSON データを受け取り、モデルをユニバースに書き戻す C# アプリケーションがあります。多くのモデルでは、DATE フィールドと TIME フィールドを分離し、モデルの作成時に個別に書き戻す必要があります。
NET Framework V4.6.1、U2.Data V2.2.2 NuGet パッケージ、U2NDK V2.2.2、Universe V11.2.5
RocketU2 を使用してユニバースでモデルを作成しました。
@ID TYPE LOC CONV ... DATA TYPE
Id D 0 CHAR(30)
AdjustmentDate D 1 D4- DATE
AdjustmentTime D 2 MTS TIME
私の最初の反応は、コントローラーにこれを書くことでした:
AdjustmentTime = DateTime.Now.TimeOfDay;
C# アプリ モデルでは次のようになります。
public TimeSpan AdjustmentTime { get; set; }
これにより、「プリミティブ型 'Time' の EDM 型 'Edm.Time' に対応するストア型がありません」というエラーが発生しました。
時間をデータベースに個別に投稿する方法に関して、多くの質問がありました。だから私はそれらを試しました、そしてここに結果があります:
製品調整コントローラー:
[Route("")]
[HttpPost]
public HttpResponseMessage PostProductAdjustment([FromBody] ProductAdjustmentCreate productAdjustmentCreate)
{
ResponseCollectionMember _response = new ResponseCollectionMember();
try
{
var id = productAdjustmentCreate.ProductId + "*" + productAdjustmentCreate.AdjustmentDate.ToString() + "*" + productAdjustmentCreate.AdjustmentTime.ToString();
var productAdjustmentEntity = new ProductAdjustmentEntity()
{
Id = id,
AdjustmentDate = DateTime.Now.Date,
AdjustmentTime = DateTime.Now.TimeOfDay.Ticks,
};
_context.ProductAdjustments.Add(productAdjustmentEntity);
}
ProductAdjustmentEntity モデル:
public class ProductAdjustmentEntity : FileBase<string>
{
public string ProductId { get; set; }
public DateTime? AdjustmentDate { get; set; }
public long AdjustmentTime { get; set; }
[NotMapped]
public TimeSpan Time
{
get { return TimeSpan.FromTicks(AdjustmentTime); }
set { AdjustmentTime = value.Ticks; }
}
}
ProductAdjustmentモデルの作成:
public class ProductAdjustmentCreate
{
[Required]
public string ProductId { get; set; }
public DateTime? AdjustmentDate { get; set; }
public long AdjustmentTime { get; set; }
[NotMapped]
public TimeSpan Time
{
get { return TimeSpan.FromTicks(AdjustmentTime); }
set { AdjustmentTime = value.Ticks; }
}
}
別の型に対して同じサポートされていないプリミティブ型エラーが発生します:「プリミティブ型 'Int64' の EDM 型 'Edm.Int64' に対応するストア型はありません。」
U2.Data パッケージを掘り下げたところ、U2.Data.ClientTypes.Int64 と Time DO が存在することがわかりました。最後に試したのは、モデル作成値を U2 で受け入れられる値にキャストするメソッドを作成することでした。
public static U2Int64 ConvertToU2Int64(long time)
{
U2Int64 u2Time = time;
return u2Time;
}
But all this does is return null.
I just want this to work so I can test posting the model to Universe.
My questions for working through this process: Is there a simple way to do this? How would I get the primitive types to be recognized? How would I write a method to convert them that I could use throughout the app?