我希望能够设置EF Code First约定,其中属性的所有列名都有小写的第一个字母。EF Code First Fluent API - 所有列中的小写第一个字母
但是,我有其他流利的API代码,从默认更改列名称。我似乎无法找到一种方法来访问当前的列属性的名称,以便小写第一个字母。如PropertyBuilder.Properties()中那样,从PropertyInfo开始是不够的,因为列名可能已经被设置为与成员名称不同。
我如何一般地告诉EF代码首字母小写所有列名的第一个字母?
我希望能够设置EF Code First约定,其中属性的所有列名都有小写的第一个字母。EF Code First Fluent API - 所有列中的小写第一个字母
但是,我有其他流利的API代码,从默认更改列名称。我似乎无法找到一种方法来访问当前的列属性的名称,以便小写第一个字母。如PropertyBuilder.Properties()中那样,从PropertyInfo开始是不够的,因为列名可能已经被设置为与成员名称不同。
我如何一般地告诉EF代码首字母小写所有列名的第一个字母?
好的,数据库管理员正在讲话。让我们尊敬地低头,看看我们能做些什么。我担心在EF 5(或更低版本)中,你可以做的很简单。在EF 6中,有Custom Code First Conventions这个功能实际上使它成为一块蛋糕。我只是想一个小样本:
// Just some POCO
class Person
{
public int PersonId { get; set; }
public string PersonName { get; set; }
}
// A custom convention.
class FirstCharLowerCaseConvention : IStoreModelConvention<EdmProperty>
{
public void Apply(EdmProperty property, DbModel model)
{
property.Name = property.Name.Substring(0, 1).ToLower()
+ property.Name.Substring(1);
}
}
class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>();
// Add the convention to the modelbuilder.
modelBuilder.Conventions.Add(new FirstCharLowerCaseConvention());
base.OnModelCreating(modelBuilder);
}
}
运行
using (var db = new MyContext())
{
db.Database.Create();
}
我的数据库中有一个People
表personId
和personName
后。
和一些简单的CRUD操作完美的工作:
using (var db = new MyContext())
{
var p = new Person { PersonName = "Another Geek" };
db.Set<Person>().Add(p);
db.SaveChanges();
}
using (var db = new MyContext())
{
var x = db.Set<Person>().ToList();
}
所以,如果DBA的希望自己的约定,你可以要求一个新的玩具:)
除了当我尝试创建一个实体并添加它时,我似乎可以使用这一事实,我得到一个InvalidOpEx“实体类型协议不是当前上下文模型的一部分“。不确定问题是什么...... – RationalGeek 2013-03-04 17:18:53
啊,那是个坏消息。我已经研究过它,但目前还没有任何线索。这就是这些alpha特征的问题,几乎没有任何文档。 – 2013-03-04 21:31:17
Yeup。我一直在做同样的事情。 – RationalGeek 2013-03-05 12:15:07
你的电话,但只是好奇:为什么小写字符这么重要吗?你可以节省很多麻烦。 – 2013-03-01 18:45:42
@GertArnold它是那些讨厌的DBA。 :-)我选择与他们的战斗,并选择不选择这个如果我可以帮助它。 – RationalGeek 2013-03-01 20:28:06
另外,如果您的Postgres作为数据库运行,它会强制使用全小写的表格和列名称,这很有价值 – 2016-03-27 00:13:37