如何使用Linq 2 SQL更新对象而没有行版本或者时间戳?
时间:2020-03-06 14:57:37 来源:igfitidea点击:
我正在尝试获取一个POCO对象,并使用XML映射文件使用Linq2SQL对其进行更新。这就是我所拥有的:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Business.Objects { public class AchievementType { public int Id { get; set; } public string Name { get; set; } } } <?xml version="1.0" encoding="utf-8" ?> <Database Name="Name" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"> <Table Name="dbo.AchievementTypes" Member="Business.Objects.AchievementType"> <Type Name="Business.Objects.AchievementType"> <Column Name="Id" Member="Id" IsDbGenerated="true" IsPrimaryKey="true" /> <Column Name="Name" Member="Name" /> </Type> </Table> </Database> CREATE TABLE AchievementTypes ( Id INTEGER IDENTITY NOT NULL, Name NVARCHAR(255) NOT NULL, CONSTRAINT PK_AchievevementTypes PRIMARY KEY (Id), CONSTRAINT UQ_AchievementTypes UNIQUE (Name) )
我正在做以下更新:
var type_repo = new BaseRepository<AchievementType>(); var t1 = new AchievementType { Name = "Foo" }; type_repo.Insert(t1); t1.Name = "Baz"; type_repo.Save(t1, "Id");
我的存储库Save只是在做:
public void Update(TData entity) { using (var ctx = MyDataContext()) { ctx.GetTable<TData>().Attach(entity); ctx.SubmitChanges(); } }
更新不会失败,也不会发生任何事情,但是数据库中的数据没有更改。
解决方案
Bah,在我问到我发现有关它的一些文档之后。
由于Context不会跟踪更改,因此我们需要执行以下操作:
ctx.Refresh(RefreshMode.KeepCurrentValues, entities);