[英]Linq-to-sql foreign key id not added automatically
我有一個基於服務的文件數據庫。 有兩個表:Client和Visitation。 表之間存在一對多關系:一個客戶->許多訪問
表:
CREATE TABLE [dbo].[Clients] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Surname] NVARCHAR (MAX) NULL,
[Firstname] NVARCHAR (MAX) NULL,
[Birthday] DATETIME NULL,
[Email] NVARCHAR (MAX) NULL,
[PhoneNumber] NVARCHAR (MAX) NULL,
[Job] NVARCHAR (MAX) NULL,
[Note] NVARCHAR (MAX) NULL,
[Birthplace] NVARCHAR (MAX) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[Visitationdb] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[StartTime] DATETIME NULL,
[ClientId] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Visitationdb_ToClients] FOREIGN KEY ([ClientId]) REFERENCES [dbo].[Clients] ([Id])
);
我創建了必需的ClientId列和外鍵約束。
LINQ到SQL
在項目中添加了新的Linq to SQL類(dbml)文件,並在設計器的幫助下創建了表的類。 (在這里,我必須將一對一關系修改為一對多)
問題
DataContext MdpContext = new DataContext(Settings.Default.mdcdbConnectionString); //creating the context
var c = new Client //creating new client
{
Birthday = patientold.Birthday,
Email = patientold.Email,
Firstname = patientold.FirstName,
Job = patientold.Job,
PhoneNumber = patientold.PhoneNumber,
Surname = patientold.SurName,
};
clients.InsertOnSubmit(c);
MdpContext.SubmitChanges(); //now I will have my auto generated client id set by database
var visit = new Visitationdb {StartTime = visitold.StartTime};
c.Visitationdb.Add(visit);
MdpContext.SubmitChanges();
異常拋出:無法將值NULL插入表'MDCDB.MDF.dbo.Visitationdb'的'ClientId'列中; 列不允許為空。 INSERT失敗。
問題
為什么L2S不處理在c.Visitationdb.Add(visit)行自動插入ClientId的問題? 為什么每次我需要一個自動生成的ID時都必須提交SubmitChanges(),在添加所有客戶端和訪問后,是否有解決方案來處理框架中的所有新行ID和外鍵?
感謝您閱讀我的問題。 編碼好!
我發現了問題!
我認為L2S處理關系(關聯)並在拖放到設計器中后正確生成實體。
問題在L2S中,在關聯中設置了Visitaitondb.Id,而不是外鍵(ClientId)。
解決方案在設計器中單擊“關系(關聯)”,然后在“屬性/參與屬性”處設置正確的數據庫字段。 就我而言:Client.Id-> Visitationdb.ClientId
不需要每次需要生成ID或添加新實體時都調用SubmitChanges。 最后,所有ID將由L2S正確設置!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.