【问题标题】:How do you update an object with Linq 2 SQL without rowversion or timestamp?如何在没有行版本或时间戳的情况下使用 Linq 2 SQL 更新对象?
【发布时间】:2010-09-14 10:41:51
【问题描述】:

我正在尝试获取一个 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();
    }
}

更新没有失败什么的,但是数据库中的数据没有改变。

【问题讨论】:

    标签: c# linq-to-sql .net-3.5


    【解决方案1】:

    呸,在我询问之后,我找到了一些关于它的文档。

    由于 Context 不跟踪更改,您需要执行以下操作:

    ctx.Refresh(RefreshMode.KeepCurrentValues, entities);
    

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 2017-11-17
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2016-12-17
      相关资源
      最近更新 更多