2013-07-25 113 views
1

假設我有一個由實體框架生成的名爲Student的類。如何判斷EntityObject的屬性是主鍵還是外鍵?

Student具有以下屬性:

Id int, 
Name, string 
Age, int 
TeacherId int 

進一步假設Id是指在SQL中的主鍵標識Student對象指的是什麼學生和TeacherId是一個外鍵,告訴學生的老師是誰。

假設我想寫一個函數,它需要任何EntityObject(比如這個)作爲參數,並返回關於哪些屬性是主鍵和外鍵的信息。

我該怎麼做?

如果這不合適,Entity Framework如何告訴我哪些屬性是主鍵和外鍵?

現在,我們不考慮複合關鍵字段。

回答

0

查看自動生成的代碼,我可以看到生成的類中的基本屬性具有幾個屬性,其中包括一個EdmScalarPropertyAttribute,它具有布爾型EntityKeyProperty,它似乎指示該屬性是否爲鍵。

如何讀取屬性值的此文章中介紹:http://msdn.microsoft.com/en-us/library/71s1zwct.aspx

我敢打賭,我能找到鑰匙國外如何被處理,以及一個統一的模式!

0

對於這些問題,我在Repository中幾乎沒有支持部分。 請參閱下面的GetEntityKeyFields方法 我沒有檢查例程已經寫入FK,但如果您檢查entityField的細節,它也會在那裏。

public DbEntityEntry<T> Entry(T entity) { return Context.Entry(entity); } 
    public DbSet<T> EntityDbSet() { return Context.Set<T>(); } // cant be in core interface since it is EF types 
    public ObjectContext ObjectContext { get { return ((IObjectContextAdapter) this.Context).ObjectContext; } } 
    // cant be in core interface since it is EF types 
    public BosBaseDbContext Context { get; protected set; } 

    public EntityState GetEntityState(T entity) { return Context.Entry(entity).State; } 
    public ObjectSet<T> GetObjectSet() { return ObjectContext.CreateObjectSet<T>(); } 

    public string[] GetEntityFields() { return GetObjectSet().EntitySet.ElementType.Properties.Select(e => e.Name).ToArray(); } 
    public string[] GetEntityKeyFields() { return GetObjectSet().EntitySet.ElementType.KeyMembers.Select(k => k.Name).ToArray(); } 

    public EntityKey GetEntityKey(T entity) { 
     if (entity == null) { 
      return null; 
     } 
     return ObjectContext.CreateEntityKey(GetObjectSet().EntitySet.Name, entity); 
    } 
相關問題