较旧的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指责程序员做错了。