2012-03-10 23 views
0

私はそのCode Generation StrategyNoneに設定されているedmxファイルと私はファクトリメソッドで作成ロジックを削除し、それに設定T4テンプレートを、持っています。私は、部分クラスを通して別のファイルにいくつかのエンティティのいくつかの追加メソッドを導入しました。派生自動生成エンティティークラス

例:私は部分クラスにエンティティUserのためのいくつかのメソッドを導入していると私はいくつかの他の方法を紹介したいUserからクラスAdminPersonを導出しました。

私はここに直面してる問題、Adminのナビゲーションプロパティに値を割り当てると、それが例外をスローしながら、Object mapping could not be found for Type with identity 'CivilRegistry.ControlledModel.Admin'.

ユーザークラス:

public partial class User 
{ 

    protected static UserRepository repository = new UserRepository(); 

    public User Insert(User user) 
    { 
     user.AddedDate = DateTime.Now; 
     user.AddedUserId = this.UserId; 
     return repository.Insert(user); 
    } 
    // 
    //Other methods goes here. 
    // 
} 

管理クラス:

public class Admin : User 
{ 
    public Admin() { } 

    private Admin(User user) 
    { 
     this.UserName = user.UserName; 
     // 
     //Other properties 
     // 
     this.AddedUser = user.AddedUser; //This line throws, Exception. 
    } 

    public static Admin FindBy(int id) 
    { 
     //repository.FindByID returns an instance of User entity. 
     return new Admin(repository.FindByID(user => user.UserId == id && user.RoleId == (int)RoleEnum.Admin)); 
    } 
} 

どうすれば解決できますか?

+0

あなたはコード専用/ POCOと考えましたか?使用したT4テンプレートについてもう少し詳しくお聞かせください。これを見ずに、質問は非常に答えにくいです。 – Carsten

+0

私は 'WriteFactoryMethod(entity、code);行をT4上のどこでもコメントアウトしましたが、これ以外はすべて自動生成と同じです。 – NaveenBhat

+0

@CarstenKönig:質問を更新しました。それ以上の説明が必要な場合は、私にお知らせください。 – NaveenBhat

答えて

1

サポートされていません。エンティティをEDMXで定義してから、コード内のエンティティから追加のクラスを派生させることはできません。このようにして作成された派生クラスはエンティティではなくなり、EFはこれ以上マッピングする方法を知らないため、EFで取得または永続化することはできません。

それはナビゲーションプロパティを割り当てることに失敗した理由は、EFがAdminUserであることを知っているし、それがコンテキストにアタッチしようとしますが、それはマッピング(EDMX)でAdminタイプが見つからないということです。

ソリューションは、あなたがUserエンティティを定義し、PersonAdmin実体を得られますEDMXにあなたの継承を動かす=継承をマッピングしています。 Hereチュートリアルがあります。