Я создал свою собственную модель базы данных, используя Entity Framework Code Сначала с последней версией Entity Framework.Удалите отношения, используя Entity Framework Code First
У меня есть этот класс:
[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 хочет удалить как друга.
Как я могу это сделать?
Спасибо за ваш ответ. И как насчет 'FromWhomIsFriend'? Должен ли я делать то же самое с этой коллекцией? – VansFannel
Если вы используете прокси (ваши коллекции являются виртуальными), то ассоциация fixup будет выполняться прокси ('user' будет удален из' friendToRemove.FromWhomIsFriend'). – Dennis