我想使用fastmember(Fastmember NuGet)擴展名和sqlbulkcopy將一定數量的自定義對象列表粘貼到我的數據庫中。但是它給了我下面的錯誤:SqlBulkCopy無法將值NULL插入列
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
Additional information: Cannot insert the value NULL into column 'functionblockId', table '\path...\DBFHX.MDF.dbo.connections'; column does not allow nulls. INSERT fails.
The statement has been terminated.
代碼:
private void insertConnection(functionblock functionblock)
{
using (var bcp = new SqlBulkCopy(db.Database.Connection.ConnectionString))
{
foreach (connection item in functionblock.connections)
{
item.functionblockId = 1;
}
using (var creader = ObjectReader.Create(functionblock.connections, "step", "transition","steptotrans", "functionblockId"))
{
bcp.DestinationTableName = "connections";
bcp.WriteToServer(creader);
}
}
}
使用型號首先,實體框架產生如下表:
CREATE TABLE [dbo].[connections] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[step] NVARCHAR (MAX) NOT NULL,
[transition] NVARCHAR (MAX) NOT NULL,
[steptotrans] BIT NOT NULL,
[functionblockId] INT NOT NULL,
CONSTRAINT [PK_connections] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_functionblockconnection] FOREIGN KEY ([functionblockId]) REFERENCES [dbo].[functionblocks] ([Id])
);
的代碼工作正常,爲不同表中還包含相同的「functionblockId」和相同類別的其他字段(儘管不包含位字段)。
我手動檢查了所有我在functionblock.connections列表中的值,然後在具體的對象中它的'functionblockId',它都被一個數字填充。更好的是,就像你在代碼中看到的那樣,我實際上在我將它硬編碼之前填充它進行硬編碼。
我不知道爲什麼會出現此錯誤,有沒有人有想法?
你必須通過使用列映射跳過標識列。您的其他表格是否沒有標識列? – 2014-10-01 15:47:23
它確實有一個標識列,後來我發現如果我這樣做:ObjectReader.Create(functionblock.connections,「Id」,「step」,「transition」,「steptotrans」,「functionblockId」))它也插入也沒有列映射。 – usselite 2014-10-01 16:22:12