相关疑难解决方法(0)

DateTime与DateTimeOffset

目前,我们有一种以TimeZone感知方式处理.net DateTimes的标准方法:每当我们生成一个DateTimeUTC时(例如使用DateTime.UtcNow),每当我们显示一个时,我们就会从UTC转换回用户的本地时间.

这工作正常,但我一直在阅读DateTimeOffset它如何捕获对象本身的本地和UTC时间.所以问题是,使用DateTimeOffsetvs我们已经做的事情有什么好处?

.net c# timezone datetime datetimeoffset

669
推荐指数
10
解决办法
19万
查看次数

如何检查属性设置器是否公开

给定PropertyInfo对象,如何检查属性的setter是否公开?

.net c# reflection

57
推荐指数
2
解决办法
2万
查看次数

如何指定从EntityFramework检索的DateTime对象应该是DateTimeKind.UTC

我有C#程序,所有DateTime对象都在这里DateTimeKind.UTC.将对象保存到数据库时,它按预期存储UTC.但是,当他们撤回时,他们就是DateTimeKind.Unspecified.有没有办法告诉实体框架(代码优先)DateTime在C#中创建对象时总是使用DateTimeKind.UTC

c# datetime utc entity-framework-6

28
推荐指数
2
解决办法
2万
查看次数

是否可以阻止EntityFramework 4覆盖自定义属性?

我首先使用EF 4数据库+ POCO.因为EF没有简单的方法来声明传入的DateTimes是种类的UTC,所以我将属性从自动生成的文件移动到另一个文件中的部分类.

    private DateTime _createdOn;
    public virtual System.DateTime CreatedOn
    {
        get { return _createdOn; }
        set
        {
            _createdOn =
                (value.Kind == DateTimeKind.Unspecified)
                    ? _createdOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
                    : value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,现在每次更新模型时,都会在T4代中再次创建自动化属性.当然这会导致以下编译错误:"类型'Foo'已包含'CreatedOn'的定义".

有没有办法告诉EF不生成该属性并让我自己处理它?

更新

谢谢大家的答案......

我创建了一个具有不同名称的新自定义属性.

    public virtual System.DateTime CreatedOnUtc
    {
        get
        {
            return (CreatedOn.Kind==DateTimeKind.Unspecified)
                ? DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc)
                : CreatedOn;
        }
        set
        {
            CreatedOn =
                (value.Kind == DateTimeKind.Unspecified)
                    ? CreatedOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
                    : value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我还将自动生成属性的所有setter和getter设置为Private,但我需要在Linq-to-Entities查询(叹气)中使用这些属性.在这些情况下,我将这些吸气剂设置为内部.

我确定希望在DateTime类型上有一个下拉列表,指定EF应该将其视为DateTime的"种类".这样可以节省数小时和额外的复杂功能.

c# entity-framework poco entity-framework-4 database-first

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

从数据库加载时,DateTime.Kind设置为未指定,而不是UTC

当我Buyin从ASP.NET MVC控制器创建一个对象的响应时,(return Json(response, JsonRequestBehavior.AllowGet);看起来像这样:

"Buyin": {
        "Id": 95,
        "PlayerSessionId": 88,
        "PlayerId": 45,
        "PlayerName": "Alan",
        "Amount": 888,
        "BuyinType": "Credits",
        "Description": null,
        "Authorized": true,
        "SignPath": "~/Signs/Buyins\\95.png",
        "Payment": null,
        "CreationDate": "/Date(1477242738042)/"
    },
Run Code Online (Sandbox Code Playgroud)

如果我在Epoch Converter上转换它,我会得到这个时间:GMT: Sun, 23 Oct 2016 17:12:18.042 GMT

在数据库中查看存储的日期时间似乎是正确的:

95  NULL    1   1   2016-10-23 17:12:18.043
Run Code Online (Sandbox Code Playgroud)

发送响应时,Kind将设置为UTC.

现在我调用一个控制器来获取我的所有数据,并且所有日期都有几个小时添加到它:

 {
    "Id": 95,
    "PlayerSessionId": 88,
    "PlayerId": 45,
    "PlayerName": "Alan",
    "Amount": 888,
    "BuyinType": "Credits",
    "Description": null,
    "Authorized": true,
    "SignPath": "~/Signs/Buyins\\95.png",
    "Payment": null,
    "CreationDate": "/Date(1477267938043)/" …
Run Code Online (Sandbox Code Playgroud)

asp.net entity-framework sql-server-2012

5
推荐指数
1
解决办法
3063
查看次数