2013-08-20 58 views
1

我使用提供的EF5.0 EntityGenerator T4模板。我想弄清楚如何在生成器創建每個類時獲取每個實體的模式和表格。我的本意是兩個常量屬性添加到每一個類,像這樣:如何在EF5.0 EntityGenerator中獲取實體的模式和表名?

public class MyEntity { 
    public const string TABLE = "MyEntityTable"; 
    public const string SCHEMA = "MyEntitySchema"; 
} 

我無法弄清楚如何利用什麼在T4模板修改來做到這一點。這是我到目前爲止(第一行已經在T4模板中):

<#=codeStringGenerator.EntityClassOpening(entity)#> 
{ 
    public const string TABLE = "testTable"; 
    public const string SCHEMA = "testSchema"; 
<# 

...並繼續T4模板。我想用適當的信息替換「testTable」和「testSchema」。任何幫助將非常感謝,因爲T4模板不是我的特長。

+0

EF的默認模式是'dbo',所以這對所有實體都應該是相同的。表名稱使用EF多元化服務,可以[禁用](http://stackoverflow.com/questions/4425027/entity-framework-code-first-naming-conventions-back-to-plural-table-名稱)在上下文中。這樣他們就等於類名 – boindiil

+0

這是不正確的。我先使用數據庫,並有很多不同的模式。 –

+0

而不是「得到它」,如果你需要知道,設置它你自己。 modelBuilder.Entity <>()ToTable( 「表名」, 「模式」)。 –

回答

0

我發現這個問題:How to get the Schema name of a Table in Entity Framework?並從那裏建成。我的解決辦法是先創建鏈接文章的擴展方法,然後修改ObjectContext的擴展方法如下:

public static string GetTableAndSchema<T>(this ObjectContext context) where T : class 
{ 
    var sql = context.CreateObjectSet<T>.ToTraceString(); 
    var startTrim = sql.LastIndexOf("FROM") + 5; 
    var initialTrim = sql.SubString(startTrim); 
    var endTrim = initialTrim.IndexOf("AS"); 

    return sql.Substring(startTrim, endTrim).Replace("[","").Replace("]",""); 
} 

這就讓我把我的GenericRepository如下:

public GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : EntityBaseClass{ 
    //REMOVED IRRELEVANT CODE 

    private MyContextType _context; 

    public virtual void AddBulk<IEnumerable<TEntity> toAdd, string connectionString, int batchSize) 
    { 
     using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.CheckContstraints | SqlBulkCopyOptions.KeepIdentity)) 
     { 
      sbc.DestinationTableName = _context.GetTableAndSchema<TEntity>(); 

      //DO THE REST OF SQL BULK COPY 
     } 
    } 
} 

這對我來說非常合適,現在允許我爲每個存在於我的上下文中的實體擁有一個SQL Bulk副本。

0

請參閱http://brewdawg.github.io/Tiraggo.Edmx/您可以通過Visual Studio中的NuGet安裝它,它提供Microsoft從您隱藏的EDMX文件中的所有元數據,非常簡單,效果很好。

相關問題