c# - Linq-to-sql 外键 id 未自动添加

标签 c# database linq-to-sql foreign-key-relationship

我有一个基于服务的文件数据库。有两个表: 客户和拜访。表之间存在一对多关系:一个客户端 -> 多次访问

表格:

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-to-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”;列不允许为空。插入失败。

问题

为什么 L2S 不处理在 c.Visitationdb.Add(visit) 行自动插入 ClientId? 为什么每次需要自动生成的 Id 时都必须 SubmitChanges(),在添加所有客户端和访问后,有没有解决方案可以通过框架处理所有新行 Id 和外键?

感谢您阅读我的问题。祝你编码愉快!

最佳答案

我发现问题了!

我认为 L2S 处理关系(关联)并在拖放到设计器中后正确生成实体。

问题 在 L2S 中,在关联中设置了 Visitaitondb.Id,而不是外键 (ClientId)。

解决方案 单击设计器中的关系(关联),然后在属性/参与属性中设置正确的数据库字段。就我而言:Client.Id -> Visitationdb.ClientId

不必在每次需要生成的 ID 或添加新实体时调用 SubmitChanges。最后所有的 id 都会被 L2S 正确设置!

关于c# - Linq-to-sql 外键 id 未自动添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25749038/

相关文章:

c# - 如何在 ScrollViewer (ListView) 中找到项目的位置?

sql-server - 哪个更好-向现有 SP 添加可选参数或添加新 SP?

php - 使用 MySQL 从另一个表复制数据时缺少行

c# - 有条件的 where with 或 criteria linqtosql

c# - Linq to Sql 查询,datediff +-3 天

c# - 如何在 C# 中复制 F# 区分的联合类型?

c# - 访问 SFTP 站点 : The requested name is valid, 时出现异常,但未找到请求类型的数据

C# 7.2 代理 "by-value returns"

database - 使用 doctrine2 测试 symfony2 的数据生成器

c# - 从 JOIN 中选择 IEnumerable 会导致复杂的 Linq-to-SQL 查询