Linq to SQL 插入数据时的一个问题

复制代码 代码如下:
create table RSSFeedRight
(
FeedId int Foreign Key (FeedId) References RSSFeed(FeedId) NOT NULL , -- FeedId ,
UserId int Foreign Key (UserId) References UserInfo(UserId) NOT NULL , -- UserId ,
RightValue bigint NOT NULL Primary key (UserId, FeedId),
)

插入数据的代码

RSSFeedRight feedRight = new RSSFeedRight();
feedRight.UserId = userId;
feedRight.FeedId = feedId;
feedRight.RightValue = 0 ;
_Db.RSSFeedRights.InsertOnSubmit(feedRight);
_Db.SubmitChanges();
每次插入时都提示说FeedId 不能插入空值,郁闷的不行,分明是给了非空值的!
后来仔细检查,发现这个RSSFeedRight 实体类中居然还有两个指向UserInfo 和 RSSFeed 表的字段,后来逐渐感觉到是外键设置问题引起的。立即通过google 搜 "linq foreign key insert"
发现有不少人遇到相同问题
找到其中一篇帖子
http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/e14f76ec-0ffe-4dd1-893c-6a4c8440c54a
其中关于这个问题是这样描述的
The mapping information (Assocation attribute on Table1 & Table2) has the foreign key dependency going in the wrong direction. It's claiming that the primary-key in table1 (the one that is auto-incremented) is a foreign key to the primary key in table2. You want that just the opposite. You can change this in the designer, DBML file or directly in the code (for a quick test) by changing IsForeignKey value for both associations.
也就是说我们不能将主键设置为和外键相同,否则就会出问题。找到问题所在,就好办了,将表结构进行如下修改

复制代码 代码如下:
create table RSSFeedRight
(
Id int identity ( 1 , 1 ) NOT NULL Primary Key ,
FeedId int Foreign Key (FeedId) References RSSFeed(FeedId) NOT NULL , -- FeedId ,
UserId int Foreign Key (UserId) References UserInfo(UserId) NOT NULL , -- UserId ,
RightValue bigint NOT NULL ,
)

问题解决。
老兵遇到新问题,技术不经常更新就要老化。

时间: 2024-09-15 08:48:01

Linq to SQL 插入数据时的一个问题的相关文章

Linq to SQL 插入数据时的一个问题_MsSql

复制代码 代码如下: create table RSSFeedRight ( FeedId int Foreign Key (FeedId) References RSSFeed(FeedId) NOT NULL , -- FeedId , UserId int Foreign Key (UserId) References UserInfo(UserId) NOT NULL , -- UserId , RightValue bigint NOT NULL Primary key (UserId

SQL插入数据时返回最新ID方法

SQL插入数据时返回最新ID方法 SELECT LAST_INSERT_ID().SELECT @@IDENTITY接可.但到下午那兄弟还没搞定.因为不知道怎么运行..项目都是三层的.基本是写在DBHELPER中.原因是其写入了: cmd.ExecuteNonQuery(); ---这是执行非查询语句返回受影响的行数. 其实是应该写入: cmd.ExecuteScalar(); 返回首行首列.可能是因为helper里面注释为:        /// <summary>         ///

oracle11g-使用sql语句select插入数据时怎么用行号补0为流水号做完单号保存

问题描述 使用sql语句select插入数据时怎么用行号补0为流水号做完单号保存 使用select语句像某个表中插入数据,表的单号要为该语句的ItemCode的值+5位流水号.流水号的规则是查询出来的"RowNum"的值自动补0为5为流水号.怎么出入,查询数据如图 解决方案 新增一列numerical order 类型为字符串 然后写个方法计算numerical order ,insert进去. 但只用sql语句的话,还没想到. 解决方案二: 试试这个: select itemcode

mfc sqlite-mfc用w32sqlite插入数据时老是提示SQLITE_ERROR

问题描述 mfc用w32sqlite插入数据时老是提示SQLITE_ERROR mfc用w32sqlite插入数据时老是提示SQLITE_ERROR if(!isopendb){ isopendb=sqlite.Open(_T(""C:Usersdb"")); } sqlite.DirectStatement(sqlstr1); sqlite.DirectStatement(sqlstr2); sqlite.DirectStatement(sqlstr3); sql

LINQ to SQL实现数据访问通用基类

LINQ to SQL让人着迷,在.Net应用程序当中,.它提供了一种安全,强大和非常灵活的方式执行数据 访问,在当前微软传道者介绍上看,很容易上手. 不幸的是,当你对LINQ进行仔细研究后,我发现在多层架构中使用LINQ的并不是十分容易. 本文介绍用LINQ to SQL实现数据层的典型的问题点 ,并提供了一个简单,方便和灵活的方式来克服 它们. 本文附带的LING to SQL 实现数据访问通用类有以下的特点: 实现了存储库模式,你可以用不到10行代码执行LINQ实体类型的CRUD (Cre

asp.net数据库连接插入数据时出错,如下:???

问题描述 asp.net数据库连接插入数据时出错,如下:??? string constr = "data source=USER-20141030QL;initial catalog=ASP.net;integrated security=true"; using (SqlConnection con = new SqlConnection(constr)) { string sql = string.Format("Insert into Employees values

codefrist-Entity Framework使用Code First 插入数据时,多出来额外的数据

问题描述 Entity Framework使用Code First 插入数据时,多出来额外的数据 在项目总使用Code First遇到坑爹的问题了 例如我有如下类: public class Catalog { public Int32 ID { get; set; } public String CatalogName { get; set; } public Catalog() { } public Catalog(Int32 ID, String Name) { this.ID = ID;

判断是否符合规划-如何监控,在插入数据时,表字段符合所对应的规范

问题描述 如何监控,在插入数据时,表字段符合所对应的规范 今天接到的一个任务: 接入数据的同时增加重点监控字段, A表字段(主键,对应表,对应字段,对应规则),A( AID,TableName,TableZd,Bid), B表字段(主键,规则编码,规则名),B(Bid,Gzbm,Gzm); A表( 1, "USER" , "PWD" , 1); B表( 1 , "^w+(.w+)*+@w+(.w+)+$" , "email格式"

sql插入数据已经存在,则执行update更新

在很多项目中,我们需要对数据进行不断的调用和更新,如果有新的数据过来,还要把它加入到数据库中.其中非常重要的一种情况就是,我们不知道传过来的数据是不是原本数据库中就已经有了的记录,所以我们常常需要先通过抓取数据,判断是否存在,如果存在执行update,如果不存在执行insert,这样就要进行两次数据库操作,第一次是查询,第二次是更新或插入,有没有一种方法可以只需要执行一次操作即可呢?答案是有的. INSERT ... ON DUPLICATE KEY UPDATE 方法可以帮助我们非常好的解决这