我希望能夠設置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