Entity framework 在MVC实体框架中更新多列
我有一个包含超过25个字段的表。它有一些包含大量数据的列(Entity framework 在MVC实体框架中更新多列,entity-framework,Entity Framework,我有一个包含超过25个字段的表。它有一些包含大量数据的列(nvarchar(MAX))。它有用户表格,如: ID // Primary key Name Mail Contact RegFees . . . // about 25 Fields Narration // Nvarchar(Max) may have upto 10000 chars Tag // Nvarchar(Max) may have upto 15000 chars 现在我只需要更新其中的姓
nvarchar(MAX)
)。它有用户表格,如:
ID // Primary key
Name
Mail
Contact
RegFees
.
.
. // about 25 Fields
Narration // Nvarchar(Max) may have upto 10000 chars
Tag // Nvarchar(Max) may have upto 15000 chars
现在我只需要更新其中的姓名、邮件、联系人字段
我读过几篇这样的帖子,比如。
但这些要求加载特定用户ID的数据,然后按如下方式进行更新:
var u = dc.Users.Where(a =>a.ID.Equals(i.ID)).FirstOrDefault();
if (u != null)
{
// Note : ALL the data of 25+ columns is loaded including nvarchar(Max)
// it will decrease performance as Whole Data is loaded first.
u.Name = i.Name;
u.Mail = i.Mail;
u.Contact = i.Contact;
}
有没有更好的方法不需要加载整个数据?向数据库中添加一个存储过程来更新表中的几个字段。您可以使用实体框架调用一个存储过程来更新数据库中的字段 其中一篇文章应该会有所帮助
您可以按照以下方法更新表中的几个字段
dc.Database.ExecuteSqlCommand("Update [User] Set Name = @Name, Mail = @Mail, Contact = @Contact Where ID = @ID", new SqlParameter("@Name", "YourName"), new SqlParameter("@Mail", "newMail"), new SqlParameter("@Contact", "newContact"), new SqlParameter("@ID", 1));
如果您想要一种EFish方法(无SQL语句),您可以将
UPDATE
作为批处理语句使用,现在重新标记
我使用了旧版本,但这个版本似乎也适用。针对您的具体情况:
dc.Users.Where(u =>
u.ID = userID)
.Update(x => new User()
{
Name = name,
Mail = mail,
Contact = contact
});
好的,这将直接对数据库发出
更新
(默认情况下不包括在事务中)。但是,需要时可以使用自定义事务(即TransactionScope`)。实际上,这两个链接都显示了如何在不从数据库加载数据的情况下执行此操作-接受答案中的第一个链接,问题本身的第二个链接。@IvanStoev我无法理解,请为我的场景(用户表)提供一个代码…存储过程不是解决方案,因为我可以在我的mvc应用程序中使用SQLCE 4.0,但它不支持存储过程…它不是纯粹的,例如:使用.Property或SetModifiedProperty?我使用的是mvc4,,,它显示的错误“Update”不是“System.Linq.IQueryable”(用户)的成员“@Admin-您是否包含对Entity Framework Plus的引用?这些批处理语句(UPDATE
,DELETE
)不包含在EntityFramework中。我无法添加除Microsoft自己的dll之外的dll或引用。。。Entity Framework Plus是否有任何microsoft更新?@Admin-我不知道有这样的microsoft程序集。但是,您可以轻松地使用直接查询方法(Nitesh
”答案)