linq2sql: не Может добавить объект с ключом, который уже используется

Существует простой трюк для просмотра в виде списка файлов, просто добавьте : после хэша.

git show 9d3a52c474:

Затем вы можете просверлить

git show 9d3a52c474:someDir/someOtherDir

Если вы ударите файл, вы получите исходную версию файла; который иногда является тем, что вам нужно, если вы ищете только хорошую ссылку или ключевые фрагменты кода (diff могут сделать все беспорядок),

git show 9d3a52c474:someDir/someOtherDir/somefile

Единственным недостатком этого метода является то, что он не " t легко показать дерево файлов.

17
задан AnthonyWJones 10 January 2009 в 14:41
поделиться

5 ответов

Я думаю, что эта ошибка происходит, если Вы Attach объект к DataContext, который был уже загружен.

код, который вызывает ошибку, точно похож на Вас шоу здесь? После создания нового OffertaDataContext Вы запрашиваете что-нибудь перед Attach?

9
ответ дан 30 November 2019 в 10:12
поделиться

Это - то, что я делал для обхождения этой ошибки. В основном Вы находите, где эта строка находится в базе данных на основе первичного ключа. Если это не существует затем, Вы вставляете его. Иначе Вы получаете версию от базы данных и обновляете все необходимые поля.

public static void Update(Enquiry enquiry)
{
    JobsDataContext db = new JobsDataContext();

    var enquiries = from e in db.Enquiries
                    where e.PKID == enquiry.PKID
                    select e;

    if (enquiries.Count() < 1)
    {
        db.Enquiries.InsertOnSubmit(enquiry);
    }
    else
    {
        Enquiry updateEnquiry = enquiries.Single();

        updateEnquiry.LengthMm = enquiry.LengthMm;
        updateEnquiry.ShippedQty = enquiry.ShippedQty;
        updateEnquiry.StatusCode = enquiry.StatusCode;
    }

    db.SubmitChanges();
}

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

2
ответ дан 30 November 2019 в 10:12
поделиться

Вы пытаетесь добавить несколько новых объектов в одном хите, где LinqEntities создаются с ключом 0?

у меня была эта проблема в прошлом, когда я пытался добавить объекты в таблицу на моей странице и затем когда я пытался удалить или обновить эти объекты, кратные числа будут иметь ключевой 0. Так, очевидно, это не знало, что сделать с моими запросами...

3
ответ дан 30 November 2019 в 10:12
поделиться

попробуйте это, даже если ваш TEntity ID (здесь Area) является столбцом идентификатора; Только это, без каких-либо изменений в вашем SP или модели:

public void InitForm()
{
    bnsEntity.DataSource = CacheManagement.cachedAreas;
    newID = CacheManagement.cachedAreas.LastOrDefault().areaID + 1;
    grdEntity.DataSource = bnsEntity;
}

private void tsbNew_Click(object sender, EventArgs e)
{
    var newArea = new Area();
    newArea.areaID = (byte)newID++;
    dataContext.GetTable<Area>().InsertOnSubmit(newArea);
    bnsEntity.Add(newArea);
    grdEntity.MoveToNewRecord();
}
0
ответ дан 30 November 2019 в 10:12
поделиться

У меня есть подход, аналогичный подходу Ноя, но я использую хранимую процедуру, чтобы проверить, существует ли запись с этим PK, таким образом Entity не загружается в контексте, а код обновления включает только две строки кода и не потребует изменений в будущем при добавлении / удалении полей из таблицы, потребуется изменить SP только в случае изменения PK таблицы:

bool existe = Convert.ToBoolean(dbc.spSConfigReportesPeriodicos(configReportesPeriodicos.CodigoCliente));

if (existe)
{
    dbc.ConfigReportesPeriodicos.Attach(configReportesPeriodicos);
    dbc.Refresh(RefreshMode.KeepCurrentValues, configReportesPeriodicos);
}
else
{
    dbc.ConfigReportesPeriodicos.InsertOnSubmit(configReportesPeriodicos);
}
dbc.SubmitChanges();

А вот хранимая процедура:

ALTER PROCEDURE dbo.spSConfigReportesPeriodicos
(
    @codigoCliente int
)
AS

IF EXISTS(SELECT 1 FROM dbo.ConfigReportesPeriodicos WHERE CodigoCliente = @codigoCliente)
    RETURN 1
ELSE
    RETURN 0

RETURN
0
ответ дан 30 November 2019 в 10:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: