[英]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.