当使用EF与breezejs时,服务器端似乎应该以大写字母开头,而在客户端,使用驼峰样式,如
EF和。的FirstName 客户端的firstName。
我认为它并不像所有小写一样好,每个人都可以理解firstname,不需要FirstName或firstName。
我想知道是否强烈建议不要使用所有小写名称?如果我想使用所有小写名称,有没有办法告诉EF(数据库优先)创建具有所有小写名称的类,无论它们在数据库端是什么?
谢谢
答案 0 :(得分:1)
我认为您应该在JSON序列化和反序列化中执行此操作。如果您使用的是Web API,则可以执行此操作。来自OdeToCode:
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
如果您不想使用JSON序列化执行此操作,那么如果您首先使用EF6代码,则可以执行一些自定义约定来实现列名称。为桌子做类似的事情。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder
.Properties()
.Configure(p => p.HasColumnName(p.ClrPropertyInfo.Name.ToLower()));
modelBuilder.Configurations.Add(new UserConfiguration());
modelBuilder.Configurations.Add(new UserHashHistoryConfiguration());
}
有关EF6中自定义约定的详细信息,请参阅MSDN上的this post。
答案 1 :(得分:0)
这就是Breeze NamingConvention的用途。
请参阅:http://www.breezejs.com/documentation/naming-convention
但是您可能遇到问题,因为NamingConvention需要能够往返您的名字。即从服务器名称传递到客户端名称并返回到服务器名称需要返回到原始名称。使用您的规则,除非您愿意保留所有先前映射的名称的映射或提出其他一些启发式,否则无法从全小写名称返回到原始服务器名称。
以下示例演示了此问题。
var lowerCaseNamingConvention = new breeze.NamingConvention({
serverPropertyNameToClient: function (serverPropertyName, prop) {
return serverPropertyName.toLowerCase();
}
clientPropertyNameToServer: function (clientPropertyName, prop) {
// need to get back to original name here
return clientPropertyName. ???
}
});
lowerCaseNamingConvention.setAsDefault();
答案 2 :(得分:0)
我不清楚为什么要更改服务器端的属性名称。 .NET类中的属性名称应为PascalCase。
您可以随意做,并在EF映射器中根据需要命名属性。在EF Database First中更难做到;您可以使用设计器完全按照您想要的方式映射每个属性名称,但是哇是耗时的。 T4的高级技术如果你的模型很大可能会更好(注意:你可以花更多时间编写/调试T4,而不仅仅是通过手工绘制属性名称)。
如果您愿意使用Code First,您可以查看EF 6 custom conventions,它看起来足够灵活和强大。
你意识到这不是一个轻而易举的问题,对吧? Breeze NamingConvention
(由其他人提及)是使您的客户端属性看起来像您希望它们看起来的适当位置。
并不总是有办法计算变换;有时您只需在NamingConvention
中提供字典。
但是,您似乎希望通过重新构建服务器上的类来处理此问题。那(正如你所注意到的)更难和/或乏味。微风无能为力。
p.s。:使用JSON.NET配置在序列化期间尝试处理此问题将无法正常工作。您需要可以在查询中引用的属性名称,JSON.NET不会变形查询字符串中提到的属性名称。