注意:无论出于何种原因,我都无法使用代码按钮,抱歉。
我们目前已经安装了以下软件包: (.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
是否可以解决这个问题...
事实证明必须在“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");
}
}
}