2012-04-29 6 views
2

Code First EFを使用してプロジェクトをビルドします。ASP.NET MVC 3:私のクラスは複雑なタイプだと思うのはなぜですか?

私は、そのプロパティの1、List<FriendGroup>FriendGroupは一種のGoogle+での「円」のよう、基本的にUser秒の単なる集まりである。)として、持っているUserクラスを持っています。 FriendGroupは、POCOとは別のファイルで定義されています...ここには...私は決してそれがComplexTypeであるとは言いませんでした。

しかし、私は自分のアプリケーションを実行しようとすると、私は例外を取得、

System.InvalidOperationException: The type 'FriendGroup' has already been configured as an entity type. It cannot be reconfigured as a complex type. 

私は、誰もがASP.NETは、私のクラスはComplexTypeで決めた理由に提供することができるかもしれない任意の洞察力に感謝することでしょう。前もって感謝します!

ETA:私のモデルから関連するビット:

namespace Clade.Models 
{ 
    public class User 
    { 
     [Key] 
     public int userID { get; private set; } 
     [Required] 
     public Profile profile { get; set; } 
     [Required] 
     public string userName { get; set; } 
     ... 
     public List<FriendGroup> friendGroups { get; set; } 
     ... 
     public List<AchievementEarned> achievementsEarned { get; set; } 
    } 
} 

namespace Clade.Models 
{ 
    public class FriendGroup 
    { 
     [Key] 
     [HiddenInput(DisplayValue = false)] 
     public int friendGroupID { get; private set; } 
     [HiddenInput(DisplayValue = false)] 
     public int userID { get; set; } 
     [Required] 
     public string friendGroupName { get; set; } 
     public Privacy defaultPrivacy { get; set; } 
     [Timestamp] 
     public DateTime dateCreated { get; set; } 
     public List<User> usersInFG { get; set; } 

     public void UpdateMe(FriendGroup editedFG) 
     { 
      friendGroupName = editedFG.friendGroupName; 
      defaultPrivacy = editedFG.defaultPrivacy; 
      usersInFG = editedFG.usersInFG; 
     } 
    } 
} 

ありEFコード、リポジトリなどもありますが、それらのどれもが任意のPOCOの内部の仕組みについては何も知りません。私がここに見るのは、の場合、UserList<FriendGroup>FriendGroupList<User>です。しかし、FriendGroupComplexTypeとして注釈したものは今まで存在していませんでした。

ETA(2):ProfileもちょうどPOCOです:

namespace Clade.Models 
{ 
    public class Profile 
    { 
     [Key] 
     public int profileID { get; private set; } 
     public User user { get; set; } 
     public DiscussionGroup dg { get; set; } 
     public string location { get; set; } 
     public Privacy locationPrivacy { get; set; } 
     public string aboutMe { get; set; } 
     public Privacy aboutMePrivacy { get; set; } 
     ... 
    } 
} 

UserComplexType -annotatedオブジェクトのカップルのList秒を持っているんが、EFは、これらの文句はなかったです。

namespace Clade.Models 
{ 
    [ComplexType] 
    public class AchievementEarned 
    { 
     public Achievement achievement { get; set; } 
     [Timestamp] 
     public DateTime dateEarned { get; set; } 
    } 
} 

ETA(3):ここでエラーが発生しUserRepositoryにおける方法です。それはvar resultsで始まる行で起こります。

public bool Add(User newUser) 
    { 
     bool rv = false; 

     //check to make sure no one else has the same username first 
     var results = from user in Users 
         where user.userName.Equals(newUser.userName) 
         select user; 
     if (results.Count() == 0) 
     { 
      this.context.Users.Add(newUser); 
      this.Commit(); 
      rv = true; 
     } 

     return rv; 
    } 
+0

列挙型をサポートしていますモデル、必要なビット(コンパイル済み)、スケールダウンされたバージョンを提供する必要があります。これはおそらく、モデル、流暢な注釈などを設定する方法に関係しているでしょう。 – NSGaga

+0

私はPOCO宣言のビットをすべての関連する注釈とともに更新しました。 Fluentを使用していないため、そこに追加するものはありません。ありがとう! –

+0

プライバシークラスコードを提供できますか?どのバージョンのEFを使用していますか? –

答えて

0

あなたは次のことを試してください: 使用int型のプロパティの代わりに、列挙型 または PM>インストール・パッケージEntityFramework -pre ウィッヒで5ベータ2より良いEFに更新しようとするあなたが

+0

ええ、これ以上調べると、EFはenumをサポートしていないことがわかります。他のクラスについて完全に不平を言っていたので、それが問題になるとは思っていませんでした。ベータに切り替えるのではなく、列挙型をクラスに変換するだけで、文字列値も取得できるようになると思います。ありがとう! –

+0

ええ、 'プライバシー 'をクラスに完全に変換した後も、私はまだエラーを受けています。とにかくそれが起こっているすべてのことをコメントしてみるつもりです。私は先に進んで、EF 5ベータ版に切り替えると思います... –

+0

このエラーは意味を持ちません。私が 'User'の' FriendGroup'への参照をすべて削除しても、私はまだ**このエラーを受けています。 –

関連する問題