2013-11-27 85 views
-3

我有以下類泛型列表<Type>來枚舉

public partial class ActionType 
{ 
    public System.Guid ActionTypeId { get; set; } 
    public string ActionTypeName { get; set; } 
} 

現在我想使用存儲在數據庫中的所有此類ActionTypes:

MyEntity entity = new MyEntity(); 
entity.ActionTypeId = ActionTypes.??? 

在這裏,我希望能夠選擇ActionTypeId由ActionTypeName。

現在我正在做這種方式:

public class ActionTypes 
{ 
    public static readonly Guid CustomerAdded = new Guid("36520b53-e1d0-4c96-bec8-0df85536a96b"); 
    public static readonly Guid CustomerEdited = new Guid("732592d3-7423-4250-aa74-e10fe1e7c030"); 
} 

我希望能夠從數據庫中programmaticaly創建ActionTypes,而不是由我自己寫的值。

所以我想要做的事,如:

public class ActionTypes 
{ 
    List<ActionType> list = context.GetAllActionTypes(); 
    foreach(ActionType type in list) 
    { 
     public static readony Guid type.ActionTypeName = type.ActionTypeId; 
    } 
} 

我如何能實現我的意圖?

最好的問候

+0

我不知道我的理解。 'Dictionary '有幫助嗎? – knittl

+2

你在這裏問的問題非常不清楚。你有代碼的工作,你想要什麼不同? –

+0

對不起,我編輯了問題 – user3041845

回答

0

也許一個字典(查找表,地圖)是你需要什麼?

public class ActionTypes 
{ 
    private List<ActionType> list = context.GetAllActionTypes(); 
    private Dictionary<string, Guid> ActionTypesMap { get; private set; } 

    public ActionTypes() { 
    this.ActionTypesMap = list.ToDictionary(
     k => k.ActionTypeName, 
     v => v.ActionTypeId); 
    } 
} 

訪問爲:Guid addedGuid = new ActionTypes().ActionTypesMap ["CustomerAdded "]

+0

我可以做到這一點:Guid addedGuid = list.FirstOrDefault(x => x.ActionTypeName ==「CustomerAdded」)。ActionTypeId; – user3041845

+0

我想要做的是避免硬編碼「CustomerAdded」 – user3041845

+0

那麼你想如何引用你的動作類型?你需要知道這個名字。我知道你可以用FirstOrDefault來做到這一點(字典更快,但使用更多的內存)。 – knittl

0

你可以使用T4模板來生成在編譯時的文件。這有助於保持Intellisense和會員名稱的驗證。

事情是這樣的:

ActionTypes.tt:

<#@ template language = "C#"       #> 
<#@ assembly name  = "Microsoft.CSharp"    #> 
<#@ assembly name  = "System.Core"     #> 
<#@ assembly name  = "System.Data"     #> 
<#@ import  namespace = "System.Collections.Generic" #> 
<#@ import  namespace = "System.Dynamic"    #> 
<#@ import  namespace = "System.Linq"     #> 
<#@ import  namespace = "System.Data.SqlClient"  #> 

public class ActionTypes 
{ 
<# 
var con = new SqlConnection("Data Source=localhost\SQLExpress;Initial Catalog=MyDatabaseName;Integrated Security=True"); 
con.Open(); 

var sqc = new SqlCommand("SELECT ActionTypeID, ActionTypeName FROM ActionTypes", con); 
var reader = sqc.ExecuteReader(); 

using (var reader = sqc.ExecuteReader()) 
{ 
    while (reader.Read()) 
    { 
#> 
    public static Guid <#=reader.GetString(reader.GetOrdinal("ActionTypeName"))#> = new Guid("<#=reader.GetGuid(reader.GetOrdinal("ActionTypeID"))#>"); 
<# 
    } 
} 
con.Close(); 
#> 
}