У меня есть приложение C#, которое получает данные JSON и записывает модель обратно в Universe. В ряде моделей мне нужно разделить поля DATE и TIME и записать их по отдельности при создании модели.
NET Framework V4.6.1, U2.Data V2.2.2 NuGet package, U2NDK V2 .2.2, Universe V11.2.5
Я создал модель во Universe с помощью 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; }
Это привело к ошибке: «Нет типа хранилища, соответствующего типу EDM 'Edm.Time' примитивного типа 'Time'».
Был ряд вопросов относительно , как отправлять время отдельно в базу данных . Итак, я попробовал их, и вот результат:
ProductAdjustmentController:
[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; }
}
}
Модель ProductAdjustmentCreate:
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; }
}
}
Я получаю ту же ошибку неподдерживаемого примитивного типа для другого типа: «Нет типа хранилища, соответствующего типу EDM 'Edm.Int64' примитивного типа 'Int64'.
Я покопался в пакете U2.Data и обнаружил, что существуют U2.Data.ClientTypes.Int64 и Time . Последнее, что я пробовал, - это создать метод, который преобразует мои значения создания модели в принятое для U2 значение:
public static U2Int64 ConvertToU2Int64(long time)
{
U2Int64 u2Time = time;
return u2Time;
}
Но все, что он делает, это возвращает null.
Я просто хочу это чтобы я мог протестировать публикацию модели во Вселенной.
Мои вопросы по проработке этого процесса: Есть ли простой способ сделать это? Как мне распознать примитивные типы? Как мне написать метод их преобразования, который я мог бы использовать во всем приложении?