gpt4 book ai didi

entity-framework - EF Code First Fluent API - 所有列的首字母小写

转载 作者:行者123 更新时间:2023-12-04 07:23:28 25 4
gpt4 key购买 nike

我希望建立一个 EF Code First 约定,其中属性的所有列名称的首字母都为小写。

但是,我有其他流畅的 API 代码可以更改默认的列名称。我似乎无法找到一种方法来访问属性的 current 列名称,以便将第一个字母小写。从 PropertyInfo 开始,如在 modelBuilder.Properties() 中一样,这是不够的,因为列名称可能已设置为与成员名称不同。

我如何一般地告诉 EF Code First 将所有列名称的第一个字母小写?

最佳答案

好的,DBA 正在发言。让我们恭敬地低下头,看看我们能做些什么。恐怕在 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 表,其中包含 personIdpersonName

一些简单的 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 想要他们的惯例,您可以要求一个新玩具 :)

关于entity-framework - EF Code First Fluent API - 所有列的首字母小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com