Microsoft.EntityFrameworkCore - “无法解析符号‘HasColumnType’”

问题描述 投票:0回答:1

注意:无论出于何种原因,我都无法使用代码按钮,抱歉。

我们目前已经安装了以下软件包: (.NETStandard 2.0) [旧项目,但目前我们需要停留在这个]

Microsoft.EntityFrameworkCore”版本=“3.1.0” Microsoft.EntityFrameworkCore.Abstractions”版本=“3.1.0” Microsoft.EntityFrameworkCore.Analyzers”版本=“3.1.0” Microsoft.EntityFrameworkCore.Relational”版本=“3.1.0” Microsoft.EntityFrameworkCore.SqlServer”版本=“3.1.0”

WebApiConfig.cs:

public static void Register(HttpConfiguration config) 
{

    // Web API configuration and services            
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
        new CamelCasePropertyNamesContractResolver();

    // Web API routes config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate:
    "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional} );

    //ODataConfiguration config.MapODataServiceRoute(routeName: "odata route", routePrefix: "odata", model: GetEdmModel() );

}

private static IEdmModel GetEdmModel() 
{ 
    var builder = new ODataConventionModelBuilder(); 
    builder.EnableLowerCamelCase();        
    builder.EntitySet<Domain>("DomainData"); //THIS ONE DOES NOT WORK -->  "Cannot resolve symbol 'HasColumnType'"
    builder.EntityType<Domain>().Property(x=>x.CreateDate).HasColumnType("datetime");
    return builder.GetEdmModel(); 
}

我读到,为了使用“.HasColumnType()”,我们需要安装“Microsoft.EntityFrameworkCore.Relational”。

我们已经安装了它,我也尝试删除所有“Microsoft.EntityFrameworkCore*”包并重新安装它们,但没有任何运气。

这里可能有什么问题?

原因:

每当我们尝试将 LINQ 与日期时间过滤器一起使用时,如下所示:

var datetimetest = new DateTime(2024, 04, 16); 

var testquery = 
    from p in _context.Domain 
    where p.CreateDate <= datetimetest 
    select p;

我们收到错误:

从字符串转换日期和/或时间时转换失败

所以我什至不确定

HasColumnType
是否可以解决这个问题...

c# linq entity-framework-core
1个回答
0
投票

事实证明必须在“OnModelCreating”内部进行定义,如下所示:

protected override void OnModelCreating([NotNull] ModelBuilder modelBuilder)
{
  
  foreach (IMutableEntityType entityType in modelBuilder.Model.GetEntityTypes())
  {
    foreach (IMutableProperty property in entityType.GetProperties().Where<IMutableProperty>((Func<IMutableProperty, bool>) (p => p.ClrType == typeof (DateTime) || p.ClrType == typeof (DateTime?))))
      property.SetColumnType("datetime");
  }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.