【发布时间】:2019-07-03 14:35:20
【问题描述】:
给定一个使用 SQL Server 和 EF Core 的 ASP.NET Core Mvc 的 C# 网站。
对于一个爱好项目,我正在查看旧报纸、文件并寻找特定的建筑物。每次我找到此类建筑物的信息时,我都会尝试写下日期信息。这样我就可以跟踪这座建筑是在哪个时期存在的。
假设我遇到 Build X 并看到日期 1880。我记下日期1880。
几周后,我再次遇到 X 楼,看到日期:1877 年 3 月 16 日。我现在知道这座建筑从 1877 年 3 月 16 日到 1880 年肯定在那里。
时期:16/03/1877 - 1880
- 现在有些建筑物没有任何日期信息。
- 有些建筑物只有一个日期(也许通过额外的研究可以找到另一个)
- 某些建筑物可能有其存在于 17 世纪的信息(没有具体的年份或日期)。
- 日期可以包含年、年+月或年+月+日
现在最好将它存储在数据库中并在模型中表示它。
一个模型上的 2 个属性就足够了吗?
public class Building {
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? Date1 { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? Date2 { get; set; }
}
它是否适合网站上的搜索过滤器。例如。搜索 1830 年至 1930 年间的一切或 17 世纪的一切。
关于最后一个问题,我的意思是,如果建筑物只有一个日期(例如 1835 年),您将如何编写 linq 查询。如果只给出一个日期,每个查询是否会包含对可空日期的额外检查?还是有更好的方案?
.Where(x => x.Date1 != null && x.Date1 >= 1830 && (x.Date2 == null || x.Date2 <= 1930))
或者正在保存一个日期时间?对象不是一个好主意,最好存储一个短整数或整数,并且只跟踪年份组件(如果有的话)?
【问题讨论】:
-
一年我会说您的日期是从 1 月 1 日到 12 月 31 日,直到您遇到建筑物被摧毁或建造的日期,这可能会调整该范围的任一端。对于单个日期,只需将两者都设置为该单个日期。
-
这取决于您将保存的有关建筑物的其他属性...如果您只想知道建筑物是否在特定日期时间在这里,所以如果新的日期是年纪大了。如果您想跟踪建筑物的生命周期(创建、火灾、破坏......),您应该查看事件溯源martinfowler.com/eaaDev/EventSourcing.html
-
这是高度基于意见的。
标签: c# asp.net-core-mvc entity-framework-core database-schema