2012-03-26 8 views
2

が、私はこの私は、エンティティフレームワークの中で部分的実体のカスタムプロパティを移入するにはどうすればよい

public partial class Person { 
    public string ImagePath{get;set;} 
} 

のようなカスタムプロパティが含まれていると私はここで、A、データを引き出すためにExecuteStoreQuery<Person>を使用している部分クラスを持っている、と言いますストアドプロシージャは、Person.ImageId = Image.ImageIdによって画像に参加し、画像テーブルからのImagePathフィールドを取得することが実行されます。

これは、部分クラスのために、しかし、完全に継承するために動作するようには思えません。

しかし、私はこの場合継承クラスを使いたくないので、EFが部分クラスのプロパティを認識し、executestorequeryが実行されたときにそれを設定することは可能ですか?

答えて

2

No. Personクラスがマッピングされている場合、エンティティEFはEDMXファイルでマッピングを使用します。部分クラスのカスタムプロパティはマッピングの一部ではないため、マッピングされたプロパティのみが設定されます。回避策として

はマッピングされません新しいクラスPersonViewを作成します。あなたの列が設定され、ExecuteStoreQueryでそれを使用する結果と同じ名前を持つすべてのプロパティを追加します。それが最も簡単なマッピングを推測しますので、この場合、EFはEDMXに新しいクラスのマッピングを持っていない - それは名前で列とプロパティをペアリングします。

+1

を、私は、継承を使用して終了しました。 – walter

+0

私も継承を使用しました!ウォルターに感謝します!私はこれがEFについて本当にうんざりしていると思いますが、あなたは素晴らしい仕事を提供しました! – Flea

1

私は、これはちょっと古いです知っているが、私は今この問題にバンプや回避策を見つけ、法の下に参照してください。やや残念なのです

public IList<Person> GetPerson() 
{ 
    var mod = (from p in Person 
       join i in Image on p.ImageId equals i.ImageId 
       select new 
       { 
        p.Name, 
        i.ImageId, 
        i.ImagePath 
       }).ToList(); 

    return (from m in mod 
      select new Person 
      { 
       Name = m.Name, 
       ImageId = m.ImageId, 
       ImagePath = m.ImagePath 
      }).ToList(); 
} 
0
public partial class PersonList: Person 
{ 
    public string ImagePath { get; set; } 
} 

List<PersonList> myList = (
    from p in db.Person 
    join i in db.Images on p.ref_image equals i.id 
    select new PersonList() 
    { 
     id = p.id, name = p.name, ImagePath = i.path 
    } 
).ToList<PersonList>(); 

Console.Write(myList[0].id.ToString() + ", " + 
    myList[0].name + " (" + myList[0].ImagePath + ")"); 
関連する問題