插入记录到查询表

时间:2018-07-19 21:12:54

标签: c# .net entity-framework

在这里(https://stackoverflow.com/a/20846170/1753877),我指的是关于如何以这种关系在Users_Friends查找表中插入记录的答案

enter image description here

答案是:

var user = db.Users.Find(userID);
var friend = db.Friends.Find(friendID);
user.Friends.Add(friend);
db.SaveChanges();

但是,在我看来,要从数据库中检索两个对象只是插入仅包含应用程序已知的两个ID的行而无需进行任何查询,这会产生很多开销。

我们不仅可以使用INSERTuserID作为值来进行基本的friendID(还是将它们传递给存储过程来执行相同操作)。

由于我是Entity Framework的新手,所以我不确定使用上面的代码是否有直接SQL INSERT会遗漏的优势,或者是否有避免使用直接SQL的合理理由带实体的SQL带实体框架

谢谢。

4 个答案:

答案 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();