0

Entity Framework Code First と最新の Entity Framework バージョンを使用して、独自のデータベース モデルを作成しました。

私はこのクラスを持っています:

[DataContract]
public class User
{
    [DataMember]
    public int UserId { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Age { get; set; }

    [DataMember]
    public string City { get; set; }

    [DataMember]
    public string Country { get; set; }

    [DataMember]
    public string Email { get; set; }

    [DataMember]
    public string InterestIn { get; set; }


    [DataMember]
    public virtual ICollection<User> Friends { get; set; }

    [DataMember]
    public virtual ICollection<User> FromWhomIsFriend { get; set; }

    [DataMember]
    public virtual ICollection<Activity> WantsToDo { get; set; }

    [DataMember]
    public virtual ICollection<Message> MessagesSent { get; set; }

    [DataMember]
    public virtual ICollection<Message> MessagesReceived { get; set; }

    public override string ToString()
    {
        string output = string.Empty;

        output = String.Format("UserId: {0}, Name: {1}, Age: {2}, City: {3}, " +
            "Country: {4}, Email: {5}, InterestIn: {6}",
            UserId, Name, Age, City, Country, Email, InterestIn);

        return output;
    }
}

そしてその構成クラス:

class UserConfiguration : EntityTypeConfiguration<User>
{
    public UserConfiguration()
    {
        Property(d => d.Name).IsRequired();
        Property(d => d.Age).IsRequired();
        Property(d => d.City).IsRequired();
        Property(d => d.Country).IsRequired();
        Property(d => d.Email).IsRequired();
        Property(d => d.InterestIn).IsRequired();

        HasMany(d => d.MessagesSent).WithRequired(l => l.SentByUser).WillCascadeOnDelete(false);
        HasMany(d => d.MessagesReceived).WithRequired(l => l.SentToUser).WillCascadeOnDelete(false);

        HasMany(d => d.Friends).
            WithMany(d => d.FromWhomIsFriend).
            Map(c =>
                {
                    c.ToTable("UserFriends");
                    c.MapLeftKey("UserId");
                    c.MapRightKey("FriendId");
                });
        HasMany(d => d.WantsToDo).
            WithMany(a => a.Users).
            Map(t =>
                {
                    t.ToTable("UserActivities");
                    t.MapLeftKey("UserId");
                    t.MapRightKey("ActivityId");
                });
    }
}

この多対多の自己関係を表すには:

ここに画像の説明を入力

ここで問題が発生しました。友達関係を削除する方法がわかりません。SQLを使用すると、次のようになります。

DELETE FROM UserFriend
WHERE (userId = user1_id   AND friendId = friend1_id) OR
      (userId = friend1_id AND friendId = user1_id)

user1_id: 友達関係を削除したいユーザーです。 friend1_id: user1 が友達として削除したい友達です。

どうすればいいですか?

4

2 に答える 2

0

したがって、私が正しく理解している場合、ユーザー User1 が User2 と友達である場合、関係は inuser1.Friendsまたは in になりuser1.FromWhomIsFriendます。

関係がどこにあるかを確認し、それに応じて削除する必要があります。

 public void RemoveFriend(User user, User friend)
 {
   if (user1.Friends.Contains(friend));
      user1.Friends.Remove(friend);
   if (user1.FromWhomIsFriend.Contains(friend));
      user1.FromWhomIsFriend.Remove(friend);
 }
于 2013-08-13T10:06:21.160 に答える