如何在不拉动所有对象的情况下编辑或添加到特定字段

  1. 我怎么能这样做( a.myFavorits.Add() )而不将所有对象拉到var a ,因为a有很多数据,我不想拉所有对象,但我找不到一种方法做到这一点。

  2. 我想做lambada和linq而不返回一些东西,但linq总是返回一些东西

     public static void addFavorits(long f,long idUser) { using (var db = dataBase()) { // here i pull object user from users table var a = db.users.Where(c => c.id == idUser).SingleOrDefault(); // here i adding to the object field myFavorits new value //myFavorits is also a table of entitys that connected to user object a.myFavorits.Add(new BE.FavoritsUsersLong { myLong = f }); db.SaveChanges(); } } 

我想做这样的事情,但我不知道如何设置字段users_TableId这是连接2个表的关键

 public static void addFavorits(long favoritId,long idUser) { using (var db = dataBase()) { db.favoritsUsersLong.Add(new BE.FavoritsUsersLong {myLong = favoritId} /*,users_TableId =idUser*/); db.SaveChanges(); } } 

这是一个做你想要的具体例子。 在此示例中,仅修改并保存Company Name 。 或者将一个项目添加到其中一个集合中。

 var cmp = new Company{ CmpId = 1, Name = "Cmp1" }; // CmpId is the primary key db.Companies.Attach(cmp); db.Entry(cmp).Property(c => c.Name).IsModified = true; // Or add an entity to a collection: cmp.Users = new[] {new User { Name = "a1", PassWord = "a1" } }; try { db.Configuration.ValidateOnSaveEnabled = false; db.SaveChanges(); } finally { db.Configuration.ValidateOnSaveEnabled = true; } 

SQL中的结果:

 DECLARE @0 VarChar(30) = 'Cmp1' DECLARE @1 Int = 1 UPDATE [dbo].[Company] SET [Name] = @0 WHERE ([CmpId] = @1) 

这里有几点需要注意:

  • 显然,您需要知道要修改的实体的ID。
  • 您创建的对象称为存根实体 ,它是一个不完整的实体。 当您尝试保存此类实体时,EF很可能会抱怨所需属性中的空值。 这就是为什么几乎可以肯定你必须禁用validation(暂时,或者,更好,立即处置上下文)。
  • 如果要将项添加到集合中,则应启用validation,因为您需要确定新实体是否有效。 所以你不应该混合这两种方式来使用存根实体。
  • 如果您经常需要实体的大致相同的一小部分,您可以考虑表拆分 。

我猜这是你想要的? 我没有看到你’编辑’我只看到你添加。

 using (var db = dataBase()) { var a = new user(); .... //set properties etc.. ... a.myFavorits.Add(new BE.FavoritsUsersLong { myLong = f }); db.users.Add(a); db.SaveChanges(); }