Как вы обновляете объект с помощью Linq 2 SQL без преобразования строк или отметки времени? - PullRequest
0 голосов
/ 01 октября 2008

Я пытаюсь взять объект POCO и обновить его с помощью Linq2SQL, используя файл сопоставления XML ... Вот что у меня есть:

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();
    }
}

Обновление не завершилось ошибкой или чем-то, но данные в базе данных не изменились.

1 Ответ

2 голосов
/ 01 октября 2008

Бах, сразу после того, как я спросил, я нашел на нем некоторую документацию.

Поскольку Context не отслеживает изменения, вам необходимо сделать следующее:

ctx.Refresh(RefreshMode.KeepCurrentValues, entities);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...