相关疑难解决方法(0)

System.DateTime类型不是受支持的类型.更改为使用System.DateTimeOffset

我们正在创建WebApi 2.2服务,并且正在使用上面列出的技术.我们的后端数据存储区是MySql 5.6.我们使用dotConnect for MySql来处理数据存储.在数据库中,有一个RowVersion列,其类型为Timestamp.在EF中,我成功生成了模型,但我注意到RowVersion设置为DateTime.当我运行WebApi时,我得到以下运行时异常,因此我需要将类型更改为DateTimeOffset,因为Timestamp不可用.

在我们的应用程序中,我们将使用带有ETag的RowVersion进行并发处理.因此,我们只会在我们的应用程序中阅读RowVersion; 每当插入或更新发生时,数据库将自动更新RowVersion.

我不知道如何纠正这个问题...也许,有一些方法可以添加一个自动类型转换,因此模型中的RowVersion是一个Int64,我们通过发送Timestamp.value自动在Int64和Timestamp之间进行转换应用.我们只是阅读它,所以这似乎是合理的.

当我在EF模型中将RowVersion更改为Int64并构建应用程序时,我收到以下错误:

错误1错误2019:指定的成员映射无效.'Model.customer'类型中成员'Version'的类型'Edm.Int64 [Nullable = True,DefaultValue =]'与'Devart.Data.MySql.timestamp不兼容[Nullable = True,DefaultValue =,Precision = 0 ''类型'Model.Store.customers'中的成员'Version'.C:\ PROJECTS\ServiceMySql\ServiceMySql\Models\Model.edmx 898 17 ServiceMySql

我非常感谢您帮助弄清楚如何解决此问题.

感谢您的时间和建议,

麦克风

本帖子开头提到的例外情况:

System.ArgumentException未由用户代码处理
HResult = -2147024809 Message =类型'System.Nullable 1 configurationCallback)位于c:\ PROJECTS\XXXXServiceMySql\XXXXServiceMySql\Global.asax.cs中的XXXXServiceMySql.WebApiApplication.Application_Start():第17行 InnerException :1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' of property 'Version' in the 'XXXXServiceMySql.Models.customer' type is not a supported type. Change to use 'System.DateTimeOffset' or ignore this type by calling Ignore<XXXXServiceMySql.Models.customer>() on 'System.Web.OData.Builder.ODataModelBuilder'. Parameter name: navigationProperty Source=System.Web.OData
ParamName=navigationProperty StackTrace: at System.Web.OData.Builder.EntityTypeConfiguration.AddNavigationProperty(PropertyInfo navigationProperty, EdmMultiplicity multiplicity, …

mysql dotconnect odata asp.net-web-api entity-framework-6

9
推荐指数
1
解决办法
1606
查看次数

使用OData v4,EF6和Web API v2.2处理日期

我正处于从v1-3升级到v4的过程中,但我遇到了一些问题.

我的理解是DateTime不受支持,我必须始终使用DateTimeOffset.精细.

但在我date在DateTime中存储Sql 数据类型之前,现在看来我得到了这个错误:

Member Mapping specified is not valid. The type 'Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]' of member 'CreatedDate' in type 'MyEntity' is not compatible with 'SqlServer.date[Nullable=False,DefaultValue=,Precision=0]'
Run Code Online (Sandbox Code Playgroud)

这有什么用?我需要能够在数据库中专门存储日期(时间和地点并不重要).如果我能得到Edm.Date以及返回的数据类型会很棒,但我之前没有.

谢谢.

编辑:示例类

之前:

public class Ticket
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required, MaxLength(50)]
    public string Reference { get; set; }

    [Column(TypeName = "date")]
    public DateTime LoggedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

后:

public class Ticket
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required, MaxLength(50)]
    public …
Run Code Online (Sandbox Code Playgroud)

entity-framework odata asp.net-web-api asp.net-web-api2

7
推荐指数
2
解决办法
7391
查看次数

OData 4 中的计算属性

我正在尝试使用 Web API 通过 OData v4 服务公开只读计算属性。我的搜索只出现 2014 年或更早的帖子,唯一的解决方案要么是过时的代码,要么是 OData 的下一个版本将支持计算属性的承诺(我确信从那时起已经有一些“下一个版本”) )。

对于我的示例,我将使用一个Person带有组合的类FullName

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // My calculated property.
    public string FullName
    {
        get
        {
            return FirstName + " " + LastName;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的WebAPIConfig

using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using TestService.Models;

namespace TestService
{
    public static class WebApiConfig …
Run Code Online (Sandbox Code Playgroud)

c# odata asp.net-web-api

4
推荐指数
1
解决办法
1683
查看次数