通常,我倾向于使用以下camel大小写约定命名我的sql数据库列:
camelCase (注意第一个字母是小写的)。
但在使用C#时,我喜欢按以下约定命名我的对象的公共属性:
CamelCase (注意第一个是大写的)。
实体框架的默认行为是命名所创建的类的属性,以便与它们在数据库中的相对列名相匹配。
项目/解决方案级别中是否有可以更改的属性来解决此问题?
发布于 2013-11-05 20:27:41
是的有。在这里你可以看到完整的例子:
using System;
using System.Data.Entity;
namespace ConsoleApplication1
{
class MyDbContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Properties().Configure(c =>
{
var name = c.ClrPropertyInfo.Name;
var newName = char.ToLower(name[0]) + name.Substring(1);
c.HasColumnName(newName);
});
}
public MyDbCondenxt(string cs) : base(cs)
{
}
public DbSet<MyModel> MyModels { get; set; }
}
class Program
{
static void Main(string[] args)
{
var context = new MyDbContext ("DefaultConnection");
context.MyModels.Add(new MyModel{SomeText = "hello"});
context.SaveChanges();
Console.ReadLine();
}
}
class MyModel
{
public int Id { get; set; }
public string SomeText { get; set; }
}
}
属性名为"someText“,列名为"SomeText”。
发布于 2011-06-28 18:40:29
我不知道解决方案级别,但你可以在你的实体上设置一个属性
[Table("myEntity")]
public class MyEntity{}
发布于 2013-05-07 02:15:48
实现这一目标并不是不可能的,但这并不容易。这在一定程度上取决于您正在使用的ef模型的类型,是代码优先还是数据库/模型优先(在这方面它们是相似的),或者您是否使用了旧的基于ObjectContext的方法。
通常,EF使用T4模板来创建实际的类和模型,但首先要编写代码,因此可以编辑T4模板并生成您想要的任何内容,例如使用PascalCasing自动生成属性。
如果您正在使用Code first (它实际上并不要求您先编码,这是一个可怕的名称),那么您可以使用Entity Framework强大的工具将您的数据库反向工程为code first模型,并且它再次使用T4来完成此操作。
如果您首先使用实际代码(即创建模型并从模型生成数据库),那么这在现有的EF5或更低版本中可能是不可能的。EF6 (目前在alpha中)有一种称为自定义约定的东西,您可能会为此使用它,但它距离生产质量还有很长的路要走。
https://stackoverflow.com/questions/6505088
复制相似问题