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

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


今天用LinqtoSql插入数据,总是插入错误,说某个主键字段不能为空,我检查了半天感觉主键字段没有赋空值啊,实在是郁闷。
要插入数据的表结构是

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 ,
)


问题解决。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值