错误,如果我们不插入PK auto inc十进制ID

时间:2015-05-16 19:52:33

标签: c# linq sql-insert

较旧的dB有3个相关的ID,这些ID是由于某些未知原因无法更改为INT的小数。使用旧的实体空间,我们不必插入ID。新代码使用LINQ,如果我们不查找最后一个ID,则将其与其他数据一起插入,我们在插入时会收到错误。所以现在我们需要获取并插入下一个id(可怕,是的)。

[Id] (PK, numeric(18,0) not null)

我检查过以确保数据类与我们不需要插入的INT匹配

这有效:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_BalanceId",   
       AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", 
       IsPrimaryKey=true, IsDbGenerated=true)]

这不起作用:

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id",     
       AutoSync=AutoSync.OnInsert, 
       DbType="Decimal(18,0) NOT NULL IDENTITY", 
       IsPrimaryKey=true, IsDbGenerated=true)]

我们无法将ID更改为INT:)

我的朋友让这个插入了Id,但是对于50,000个插入来说这个速度非常慢。

    var campaign = new Campaign
    {
        Id = subFactory.CampaignNewId(),
        UserId = userId,
        User = user.SystemUser,
        MessageId = whatMsgid == 0 ? (int?)null : whatMsgid,
        VMMessageId = whatMsgVmailid == 0 ? (int?)null : whatMsgVmailid,
        PriorityId = priorityOfcalls,
        TTSDataFileId = null,

以下是方法:

 public int CampaignNewId()
 {
        return Convert.ToInt32(Context.Campaigns.Max(p=>p.Id)) + 1;
 }

迷失在这一个上。程序员指责糟糕的dB设计,当然DBA指责程序员做错了。

0 个答案:

没有答案