[size=12px]比如定義了一個物體類,
class UserInfo
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] //指明這一列是自增列
public decimal ID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
===============
在DbContext的OnModelCreating中,通常需要一個類一個類的指定配置,如:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("JAPIBASE");
modelBuilder.Entity<UserInfo>().ToTable("USERINFO");
//自增序列
modelBuilder.Entity<UserInfo>().HasKey(o => o.ID);
modelBuilder.Entity<UserInfo>().Property(o => o.UserName).HasColumnName("USERNAME");
modelBuilder.Entity<UserInfo>().Property(o => o.Password).HasColumnName("PASSWORD");
}
=======================
我的目的是想能通過一個通用的泛型函式,自動遍歷entity然后,自動映射屬性到表的欄位上,行不行?
如下:但是在property()這里應該帶入什么引數,出錯,實作不了,有哪位高見?
/// <summary>
/// 使用泛型方法
/// (適用于未定義自增關鍵字或者自增關鍵字為ID的物體與表的映射)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="modelBuilder"></param>
/// <param name="pojo"></param>
public static void MapToTable<T>( ref DbModelBuilder modelBuilder ,
bool hasIncreaseIDKey =false)
where T : class //用where... 來說明 泛型T為型別才能進行轉換,否則不能將T用在泛型方法的引數中.
{
string propertyName;
modelBuilder.Entity<T>().ToTable(typeof(T).Name.ToUpper());
foreach (PropertyInfo pi in typeof(T).GetProperties()) //遍歷類成員,并獲得所有屬性的名字
{
propertyName = pi.Name;
//自增序列
if (hasIncreaseIDKey == true && propertyName.ToUpper() == "ID")
modelBuilder.Entity<T>().HasKey(o =>o.GetType().GetProperty( pi.Name) );
if (propertyName != "") {
modelBuilder.Entity<T>().Property(o =>o.GetType().GetProperty( pi.Name) ).HasColumnName(propertyName.ToUpper());
}
}
}
黑體字地方就不知道該傳遞什么引數才行了
uj5u.com熱心網友回復:
額。1 首先我個人不太喜歡 fluent 的設定方式,
我更喜歡使用 注解/特性
2 我記得不需要每個欄位映射。
你既然只是大小寫不同,只需要modelBuilder設定忽略大小寫就好了。
3 我沒用過動態反射這個去做。
因為我沒有以上兩步操作。。。所以沒這么麻煩。
uj5u.com熱心網友回復:
我是EF的Oracle資料庫,oracle全是大寫的,注解形式行是行,不過在codefirst模式下,手寫的類和表名還是有不一致,所以fluent形式我感覺是更清晰集中一些,不過這個自增欄位在oracle好像還是得明確處理他,那這就得挨個entity去弄,一樣逃不掉,至于大小寫忽略,我去!我真的還不知道,我去!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/81432.html
標籤:C#
上一篇:求一GIS演算法,求助!
