我正在使用Entity Framework Code First开发一个相当大的数据库模式.我更喜欢Fluent API而不是Data Annotations方法,因为它将我的域对象保留为简单的POCO.
为了使用Fluent API,我必须在继承自DbContext的类中重写OnModelCreating.
我不喜欢所有实体的所有映射都在这个方法中.我之前使用过类似FluentNHibernate的东西,每个实体都有自己的映射类.EF有类似的东西吗?
我想我可以创建自己的接口来实现一个映射类,并在OnModelCreating方法中调用它们.我可以使用反射或IoC来发现它们.我并没有特别看到这种方法有什么问题,但我想知道Entity Framework是否已经开箱即用了这样的东西?
我编写了以下扩展方法来连接Windows运行时应用程序中的两个IBuffer对象:
public static IBuffer Concat(this IBuffer buffer1, IBuffer buffer2)
{
var capacity = (int) (buffer1.Length + buffer2.Length);
var result = WindowsRuntimeBuffer.Create(capacity);
buffer1.CopyTo(result);
buffer2.CopyTo(0, result, buffer1.Length, buffer2.Length);
return result;
}
Run Code Online (Sandbox Code Playgroud)
这是处理这个问题最有效的方法吗?有更好或更简单的方法吗?
我已经回顾了在C#中组合两个或多个字节数组的最佳方法,但我认为我不应该转换为字节数组.
我写这篇文章是为了收集关于我们方法的评论,希望能帮助别人(和我的记忆).
DateTime没有时区信息的数据类型.where子句)中.想象一下Breeze控制器直接将数据库中的表作为IQueryable公开.Breeze客户端将以UTC格式将任何日期过滤器(where)子句传递给服务器.实体框架将忠实地使用这些日期来创建SQL查询,完全不知道数据库表日期在我们的本地时区.对我们而言,这意味着结果在12到13个小时之间,偏离了我们想要的结果(取决于夏令时).我们的目标是确保我们的服务器端代码(和数据库)始终在我们的本地时区中使用日期,并且所有查询都返回所需的结果.
看来,当我使用Firebase.ServerValue.TIMESTAMP当前,它正在使用PDT(我假设将在秋季更改为PST).
有没有办法在UTC而不是PDT中获取此信息?
我在使用JSON序列化对象在客户端浏览器上显示正确日期时遇到问题.用户可以定义他们想要查看数据的时区.鉴于此,我将UTC日期转换为服务器上用户的时区.然后我想通过JSON将日期/时间(已经转换为定义的时区)序列化到浏览器.
看起来很简单,但是我一直在使用的JSON序列化程序已经严重破坏了我的日期.服务器为UTC,客户端位于Central(-6).即使我将DateTime.Kind指定为Unspecified,也会调整日期(-12小时).
不知何故,.NET知道客户端的浏览器在哪个时区以及服务器处于什么时区,即使我已根据用户的全局设置调整了时间并设置了日期,它也取消了我的日期/时间-6.有点不明确.如何才能让JSON序列化程序不尝试调整日期?
List<ErrorGridModel> models = Mapper.Map<ErrorCollection, List<ErrorGridModel>>(errors);
foreach (ErrorGridModel m in models)
{
//convert UTC dates to user local dateTime - split out date vs. time for grouping & splitting columns
DateTime dtLocal = TimeZoneInfo.ConvertTimeFromUtc(m.ErrorDate, this.AppContext.User.TimeZoneInfo);
m.ErrorDate = new DateTime(dtLocal.Year, dtLocal.Month, dtLocal.Day, 0, 0, 0, DateTimeKind.Unspecified);
m.ErrorTime = new DateTime(1900, 1, 1, dtLocal.Hour, dtLocal.Minute, dtLocal.Second, DateTimeKind.Unspecified);
}
IQueryable<ErrorGridModel> dataSource = models.AsQueryable();
return new ContentResult() { Content = JsonConvert.SerializeObject(dataSource.ToDataSourceResult(request), new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat }), ContentType = "application/json" }; …Run Code Online (Sandbox Code Playgroud) 这听起来似乎是表面上的一个愚蠢的问题,但为什么Hot Towel SPA模板包括Breeze?
过去几天我一直在学习Hot Towel及其依赖项,据我所知,模板中没有任何内容实际上使用Breeze.也许这会随着未来的发布而改变?
当然,Breeze是一个很好的图书馆.但它必须采用CRUD方法,并要求您以特定方式设计ApiControllers.(元数据,SaveChanges等)请看这里
它还指导您进入实体框架.虽然这更像是一种软依赖,但由于Breeze还展示了没有它的示例,它仍然使用修改后的存储库模式引导您使用类似的实现模式.
如果您使用NoSQL数据存储区或CQRS模式而不是CRUD,那么Breeze将变得非常难以使用.有一些替代的数据访问库可以很好地运用这种风格,例如AmplifyJS.
但热毛巾的其余部分非常棒!我特别喜欢Durandal.所以问题是,如果模板实际上没有进行任何数据访问 - 为什么要包含任何数据访问组件?最好是在没有Breeze的情况下运送它,如果最终用户想要使用Breeze,或者放大,或者其他什么 - 那就这样吧.Hot Towel的其余部分将继续作为一个伟大的SPA实施发光.
core/common/main/en.xmlCLDR 中有几个示例城市和元区域名称,但是,完整列表不包含在en.xml中,就像所有其他语言一样.
为什么会这样,我在哪里可以找到英语示范城市的完整列表?
来自ISO-8601:2004(E)规范:
4.2.2.4带小数部分的表示法
如果特定应用需要,可以包括小时,分钟或秒的小数部分.如果包含小数部分,则应省略低阶时间元素(如果有),小数部分应从整数部分除以ISO 31-0中指定的小数符号,即逗号[,]或句号[ ].其中,逗号是首选标志.
很简单.因此,根据此规范,优选使用逗号分隔整个和小数部分来写入一秒的分数,例如2014-01-01T00:00:00,123.然而,似乎几乎无处不在,只接受小数点(又名"完全停止")!
现在我确定有一些语言或库将这一点考虑在内,我知道在很多情况下你可以自己提供格式的全部细节.但这似乎是对规范的明显监督,似乎各种程序员都犯了同样的错误. 除了纯粹的人为错误之外,是否存在这种情况的原因?
以下是我测试的地方列表.如果您找到其他人,请随意编辑问题以扩充我的列表.谢谢.
DateTime dt = DateTime.Parse("2014-01-01T00:00:00,123");
Run Code Online (Sandbox Code Playgroud)
抛出一条FormatException消息"字符串未被识别为有效的DateTime".使用句点而不是逗号的相同内容会成功解析.
最新(在撰写本文时)Chrome,Internet Explorer,Firefox和Node.js进行了测试:
var dt = new Date('2014-01-01T00:00:00,123');
Run Code Online (Sandbox Code Playgroud)
退货"Invalid Date".使用句号代替工作正常.
var valid = moment("2014-01-01T00:00:00,123").isValid();
Run Code Online (Sandbox Code Playgroud)
退货false.使用句点代替返回true.
echo strtotime('2014-01-01T00:00:00,123');
Run Code Online (Sandbox Code Playgroud)
返回一个空字符串.使用句号代替工作正常.
require 'time'
puts Time.iso8601("2014-01-01T00:00:00,123")
Run Code Online (Sandbox Code Playgroud)
给出了运行时错误.虽然Time不保持小数秒,但它不应该出错 - 实际上如果使用句号,它就可以工作.
我有
import arrow
s = '2015/12/1 19:00:00'
tz = 'Asia/Hong_Kong'
Run Code Online (Sandbox Code Playgroud)
如何用Arrow解析这个问题,以便获得带有时区的Arrow对象tz?以下默认为UTC时间.
In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss')
Out[30]: <Arrow [2015-12-01T19:00:00+00:00]>
Run Code Online (Sandbox Code Playgroud)
我知道该.to功能,但转换时区,但不允许我更改为时区.
我有一个WebAPI动作,如下所示:
[Route("api/values/{id}")]
public async Task<HttpResponseMessage> Delete(string id, DateTimeOffset date) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是当我从一个HttpClient实例调用它时,创建一个如下的URL:
string.Format("http://localhost:1234/api/values/1?date={0}", System.Net.WebUtility.UrlEncode(DateTimeOffset.Now.ToString()));
// -> "http://localhost:1234/api/values/1?date=17%2F02%2F2015+7%3A18%3A39+AM+%2B11%3A00"
Run Code Online (Sandbox Code Playgroud)
我得到一个400回复,说date不可存在的参数不存在.
我也尝试将该[FromUri]属性添加到参数中,但它仍然没有映射.如果我将其更改为DateTimeOffset?我可以看到它保留为null并且查看Request.RequestUri.Query值是否存在,只是没有映射.
最后,我尝试不做一个WebUtility.UrlEncode,它没有任何不同.