SubmitChanges () обновить только 1 поле? - PullRequest
0 голосов
/ 25 октября 2009

Я действительно новичок LINQ. У меня неизвестная проблема:

public static int save(TEntity obj)
    {
        var table = dbo.GetTable<TEntity>();
        var mapping = dbo.Mapping.GetTable(typeof(TEntity));
        var pkfield = mapping.RowType.DataMembers.Where(d => d.IsPrimaryKey).Take(1).SingleOrDefault();
        if (Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null)) == 0)
            table.InsertOnSubmit(obj);
        try
        {
            dbo.SubmitChanges();
        }
        catch (ChangeConflictException e)
        {
            dbo.SubmitChanges();
        }
        if (dbo.ChangeConflicts.Count == 0)
        {
            ClearCache(dbo);
            return Convert.ToInt32(obj.GetType().GetProperty(pkfield.Name).GetValue(obj, null));
        }
        else
        {
            dbo.ChangeConflicts.ResolveAll(System.Data.Linq.RefreshMode.KeepCurrentValues);
            return 0;
        }
    }

При использовании этого метода обновляется только 1 поле !! Вот мой журнал:

UPDATE [dbo].[tbl_album]
SET [dt_m_date] = @p1
WHERE [i_album_id] = @p0
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- @p1: Input BigInt (Size = 0; Prec = 0; Scale = 0) [1256485605]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918

Даже я почти изменил поля, у моей таблицы уже есть первичный ключ. Но все же проблема.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 26 октября 2009

Проведя много тестов, я обнаружил одну вещь: все внешние ключи не обновляются, нормальные поля в порядке. Так скажи мне, есть ли какой-то разумный способ вызвать эту чушь?

Я много гуглил, но ничего не нашел ...

0 голосов
/ 25 октября 2009

Вы прошли через свой save метод, чтобы увидеть, что делает код? Нашел ли он правильный столбец первичного ключа и действительно ли он обнаружил наличие существующего первичного ключа?

Какие поля у вас есть в вашем tbl_album - вы убедились, что они не все помечены как доступные только для чтения (маловероятно, но все же - проверьте, чтобы быть уверенным!).

Я не вижу сейчас ничего плохого в вашем коде, он кажется мне немного сложным, но я думаю, он должен работать.

Марк

UPDATE:
Убедитесь, что столбцы таблицы не все доступны только для чтения! :)

alt text

...