【发布时间】:2012-04-27 16:06:55
【问题描述】:
我正在尝试根据用户选择更新特定记录。关于实体框架语法,我不是很熟悉。是否可以在Entity FrameWork中实现这条SQL语句?
谢谢!
update Table1
set Colum1='1'
where Column2='1234567'
【问题讨论】:
标签: vb.net asp.net-mvc-3 entity-framework-4.3
我正在尝试根据用户选择更新特定记录。关于实体框架语法,我不是很熟悉。是否可以在Entity FrameWork中实现这条SQL语句?
谢谢!
update Table1
set Colum1='1'
where Column2='1234567'
【问题讨论】:
标签: vb.net asp.net-mvc-3 entity-framework-4.3
var record = _db.Table1.where(r => r.Column2 == '1234567');
record.Column1 = '1'
_db.SaveChanges();
其中 _db 是实体框架 DbContext 类...
HTH。
【讨论】:
是的,Linq 版本:
Table1Entity entity = from e in dbContext.Table1Entitys
where e.Column2 = '1234567'
select e
entity.Column1 = '1';
dbContext.SaveChanges();
看起来 Sunny 有Lambda version。
但是,无论是这个还是 Sunny 的答案都不会产生确切的 SQL,因为它们实际上都产生了一个 SELECT 和一个 UPDATE:
SELECT <all columns>
FROM <table>
WHERE Column2 = '1234567'
UPDATE <table>
SET <allcolumns> = <allvalues>, etc etc
WHERE Column2 = '1234567'
如果您只想更新,那么您可以执行以下操作:
var row = new Row();
// assuming a single column PK (id)
row.Column1 = '1';
row.Column2 = '1234567';
dbContext.Attach(row);
var entity = dbContext.Entity(entity);
entity.Property(e => e.Column2).IsModified = true;
dbContext.SaveChanges();
准确地产生:
UPDATE <Table>
SET Column2 = '1234567'
WHERE Column1 = '1'
【讨论】:
// 注意:ctx = 你的 DbContext
var tbl1 = (from t in ctx.Table1 where t.Id == 1234567 select t).FirstOrDefault();
if (tbl1 != null) {
tbl1.Column1 = "1";
ctx.SaveChanges();
}
【讨论】: