在这里(https://stackoverflow.com/a/20846170/1753877),我指的是关于如何以这种关系在Users_Friends
查找表中插入记录的答案
答案是:
var user = db.Users.Find(userID);
var friend = db.Friends.Find(friendID);
user.Friends.Add(friend);
db.SaveChanges();
但是,在我看来,要从数据库中检索两个对象只是插入仅包含应用程序已知的两个ID的行而无需进行任何查询,这会产生很多开销。
我们不仅可以使用INSERT
和userID
作为值来进行基本的friendID
(还是将它们传递给存储过程来执行相同操作)。
由于我是Entity Framework的新手,所以我不确定使用上面的代码是否有直接SQL INSERT
会遗漏的优势,或者是否有避免使用直接SQL的合理理由带实体的SQL带实体框架
谢谢。
答案 0 :(得分:2)
有几种方法可以做到这一点:
首先,如果User_Friends
拥有自己的实体,则只需使用ID填充新的user_friends并保存更改即可。
第二个是创建一个新朋友和一个用户并将其附加(类似于此操作,可能需要一些调整):
var friend = new Friend{Id = friendID};
var user = new User{Id = userID};
using (var context = new Context())
{
context.Friends.Attach(friend);
user.Friends.Add(friend);
context.Entry(user).State = EntityState.Modified;
context.SaveChanges();
}
Entity Framework Add and Attach and Entity States
第三种方法是使用Context.Database并执行sql命令或sql查询(取决于)对数据库执行任意SQL。
我发现最简单的方法是将User_Friends
作为其自己的EF实体并创建一个新的EF实体。这使得添加到联合表非常容易。
答案 1 :(得分:0)
您可以直接插入:
db.Database.ExecuteSqlCommand(@"insert into Users_friends
(UserId, FriendId) values ({0}, {1})", userID, friendID);
我首先从db中检索值没有看到优势(除了确认用户和朋友都存在之外)。但是,在上面的代码中,没有检查是否已存在可以轻松添加到SQL中的userID,friendID对。
答案 2 :(得分:0)
您是正确的,这是很多不必要的开销。在Entity Framework中,只需传递加载了PK的类的新实例就足够了:
var user = db.Users.Find(userID);
var friend = new Friend { Id = friendID };
user.Friends.Add(friend);
db.SaveChanges();
答案 3 :(得分:0)
也像这样将桥表创建为模型
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string PasswordHash { get; set; }
public string PasswordSalt { get; set; }
public List<UserFriend> Friends { get; set; }
public User()
{
Friends = new List<UserFriend>();
}
}
public class Friend
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class UserFriend
{
public int Id { get; set; }
public int UserId { get; set; }
public int FriendId { get; set; }
[ForeignKey("UserId")]
public User User { get; set; }
[ForeignKey("FriendId")]
public Friend Friend { get; set; }
}
然后您可以像这样创建或吸引用户朋友
// add user friend
var userFriend = new UserFriend()
{
UserId = userId,
FriendId = friendId
};
db.UserFriends.Add(userFriend);
db.SaveChanges();
// get user friends
db.Users.Include("Friends").ToList();