2

という名前の Entity Framework によって生成されたクラスがあるとしStudentます。

Student次のプロパティがあります。

Id int,
Name, string
Age, int
TeacherId int

さらに が、オブジェクトが参照するId生徒を識別する SQL の主キーを参照し、その生徒の教師が誰であるかを示す外部キーであるとします。StudentTeacherId

パラメータとしてany EntityObject (このようなもの) を取り、どのプロパティが主キーと外部キーであるかに関する情報を返す関数を書きたいとします。

これどうやってするの?

これが適切でない場合、Entity Framework はどのプロパティが主キーであり、外部キーであるかをどのように判断できますか?

ここでは、複合キー フィールドについては考慮しません。

4

2 に答える 2

0

このような質問に対するサポート セクションはリポジトリにほとんどありません。 以下の 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);
    }
于 2013-07-26T04:04:10.957 に答える