Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将时间值从.NET实体框架发布到Universe数据库_C#_Primitive Types_Universe_U2_Rocket U2 - Fatal编程技术网

C# 将时间值从.NET实体框架发布到Universe数据库

C# 将时间值从.NET实体框架发布到Universe数据库,c#,primitive-types,universe,u2,rocket-u2,C#,Primitive Types,Universe,U2,Rocket U2,我有一个C#应用程序,它接收JSON数据并将模型写回Universe。在许多模型中,我需要分离日期和时间字段,并在创建模型时将它们分别写回 NET Framework V4.6.1, U2.Data V2.2.2 NuGet软件包, U2NDK V2.2.2, 宇宙V11.2.5 我使用RocketU2在宇宙中创建了模型: @ID TYPE LOC CONV ... DATA TYPE Id

我有一个C#应用程序,它接收JSON数据并将模型写回Universe。在许多模型中,我需要分离日期和时间字段,并在创建模型时将它们分别写回

NET Framework V4.6.1, U2.Data V2.2.2 NuGet软件包, U2NDK V2.2.2, 宇宙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;
[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);
        }
在C#应用程序模型中:

public TimeSpan AdjustmentTime { get; set; }
这导致错误:“没有与基元类型“Time”的EDM类型“EDM.Time”对应的存储类型。”

关于这个问题有很多问题。我试过了,结果如下:

产品调整控制器:

AdjustmentTime = DateTime.Now.TimeOfDay;
[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; }
        }
    }
对于不同的类型,我得到了相同的不受支持的基元类型错误:“没有与基元类型“Int64”的EDM类型“EDM.Int64”对应的存储类型。”

我深入研究了U2.Data包,发现U2.Data.ClientTypes.Int64和Time确实存在。我最后尝试的是创建一个方法,将我的模型创建值转换为U2接受的值:

public static U2Int64 ConvertToU2Int64(long time)
        {
            U2Int64 u2Time = time;
            return u2Time;
        }
但所有这些都返回null

我只是想让它工作,这样我就可以测试发布到宇宙模型


我的问题是:有没有一个简单的方法来完成这个过程?如何识别基本类型?我该如何编写一个方法来转换它们,以便在整个应用程序中使用?

一般来说,您正在尝试为一个列(用RDBMS术语)找到一个数据类型,该列可以很好地处理dotnet数据类型

这是一个MySql。。例如。。这是一种映射

找到magic数据类型后,您必须告诉EF使用它(而不是依赖默认值)

在上面的示例中,属性

[Column(TypeName = "varchar(200)")]
正在覆盖任何默认值

我没有安装任何Rocket DB,所以我无法具体尝试任何东西

但也许

[Column(TypeName = "MD2")]

?

如果您希望ORM映射使用“fluent”,那么应该使用“HasColumnType”


我有一个静态类,用于将时间值转换为拾取时间结构,该结构只是从午夜开始的秒数。在宇宙中调用TIME()时,它返回一个double

事实上,最困难的部分是根据您使用的日期时间值确定午夜的时间。这就是为什么我有两个不同的版本来使用DateTime和DateTimeOffset

我还有第三种方法可以重组它们

public static class Time
{
    public static double GetPickTimeFromDateTime(DateTime dt)
    {
        DateTime midnight = DateTime.Parse(dt.Date.ToString());
        TimeSpan ts = dt - midnight;
        return ts.TotalSeconds;
    }
    public static double GetPickTimeFromDateTimeOffset(DateTimeOffset dt)
    {
        DateTimeOffset midnight = DateTime.Parse(dt.Date.ToString());
        TimeSpan ts = dt - midnight;
        return ts.TotalSeconds;
    }
    public static DateTime GetDateTimeDateAndPickTime(DateTime date, double pickTime)
    {
        return date.AddSeconds(pickTime);
    }
}
public static class Time
{
    public static double GetPickTimeFromDateTime(DateTime dt)
    {
        DateTime midnight = DateTime.Parse(dt.Date.ToString());
        TimeSpan ts = dt - midnight;
        return ts.TotalSeconds;
    }
    public static double GetPickTimeFromDateTimeOffset(DateTimeOffset dt)
    {
        DateTimeOffset midnight = DateTime.Parse(dt.Date.ToString());
        TimeSpan ts = dt - midnight;
        return ts.TotalSeconds;
    }
    public static DateTime GetDateTimeDateAndPickTime(DateTime date, double pickTime)
    {
        return date.AddSeconds(pickTime);
    }
}