我需要使用LINQ to SQL将记录插入到没有主键的表中。桌子设计很差;我无法控制表格结构。该表由几个varchar字段,文本字段和时间戳组成。它用作其他实体的审计跟踪。
完成插入的最佳方法是什么?我可以扩展此表的Linq分部类并添加“假”密钥吗?我对任何黑客都持开放态度,无论如何。
答案 0 :(得分:11)
LINQ to SQL不适用于此任务,因此请勿使用它。只需将插入变为存储过程,然后将过程添加到数据模型中。如果你不能这样做,用一些内联SQL编写一个普通的函数。
答案 1 :(得分:9)
在设计器中打开您的DBML文件,并为映射提供密钥,无论您的数据库是否有。这将解决您的问题。但是,请注意,如果数据库中没有真正的密钥,则不能指望用于标识的列或其他任何内容。
答案 2 :(得分:3)
我能够使用复合键解决这个问题。
我在一个只包含两列的表中遇到了类似的问题:用户名,角色。 该表显然不需要标识列。所以,我创建了一个包含用户名和角色的复合键。这使我能够使用LINQ添加和删除条目。
答案 3 :(得分:2)
您可以使用DataContext.ExecuteCommand方法运行自己的自定义插入语句。
或者,您可以向列中添加primary key,这将允许objects to be tracked用于datacontext的插入/更新/删除。即使该列实际上不是数据库中的强制主键,这也会起作用(linq如何知道?)。如果您只是在插入并且从不在同一个datacontext中重复使用主键值,那么你会没事的。