Code First EF を使用してプロジェクトをビルドします。
私は、User
そのプロパティの 1 つとして持つクラスを持っていますList<FriendGroup>
(ここで、aFriendGroup
は基本的に s の単なるコレクションでありUser
、Google+ の「サークル」のようなものです)。 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の内部の仕組みについては何も知りません。ここで問題になる可能性User
があるのは、List<FriendGroup>
とFriendGroup
があることだけですList<User>
。しかしFriendGroup
、ComplexType
.
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; }
...
}
}
User
List
注釈付きのオブジェクトがいくつかありComplexType
ますが、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;
}