EF 框架如何在SaveChanges()之前拿到对象的自增长ID?

OldEagle33032 2016-07-29 02:09:10
Student student = CurrentDal.AddEntity(student entity);
classentity.student Id = student .id;
CurrentDB .classentityDal.AddEntity(classentity);
return CurrentDBSession.SaveChange ();

好像取不了student .id
...全文
2926 22 打赏 收藏 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39251400 2019-06-05
  • 打赏
  • 举报
回复
引用 18 楼 weixin_38950695 的回复:

public int Test()
        {
            int NeedID = 0;//你要的东东
            ModelClass Exp = new ModelClass() { name = "123" };
            using (myEntities j = new myEntities())
            {
                try
                {
                    j.ModelClass.Add(Exp);
                    j.SaveChanges();
                    //EF 回写了 Exp 实例的ID属性
                    NeedID = Exp.ID;
                } 
                catch(Exception ex)
                {
                    //throw new Exception( ex.Message);
                }               
            }
            return NeedID;
        }
就是这样的 很棒啊 我也正好遇到这样的问题了
iack00000 2018-09-11
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
[quote=引用 3 楼 OldEagle33032 的回复:] 哪要怎么写呀
EF 教程上教你怎么写,你就学习它的做法。不要心机太重,要先学会简单、正规的东西。[/quote] 你就是一个大水军, 一直水 到 12 级
公西雒 2018-05-11
  • 打赏
  • 举报
回复
楼上的方法放弃了事务处理,这里有个更合理的方法,就是在数据库中添加表关系的外键。 https://jingyan.baidu.com/article/5225f26b05a25de6fa0908ae.html 然后添加映射,这样两个表中的Id会同时更新。 https://www.cnblogs.com/dansediao/p/6051544.html
夜阿狸 2018-03-22
  • 打赏
  • 举报
回复
我也觉得,我在CSDN上很多回复都看到了他,他技术的确可以,但是大部分对一些新手的回答十分不友好
引用 18 楼 weixin_38950695 的回复:

public int Test()
        {
            int NeedID = 0;//你要的东东
            ModelClass Exp = new ModelClass() { name = "123" };
            using (myEntities j = new myEntities())
            {
                try
                {
                    j.ModelClass.Add(Exp);
                    j.SaveChanges();
                    //EF 回写了 Exp 实例的ID属性
                    NeedID = Exp.ID;
                } 
                catch(Exception ex)
                {
                    //throw new Exception( ex.Message);
                }               
            }
            return NeedID;
        }
五块半 2018-02-28
  • 打赏
  • 举报
回复

public int Test()
        {
            int NeedID = 0;//你要的东东
            ModelClass Exp = new ModelClass() { name = "123" };
            using (myEntities j = new myEntities())
            {
                try
                {
                    j.ModelClass.Add(Exp);
                    j.SaveChanges();
                    //EF 回写了 Exp 实例的ID属性
                    NeedID = Exp.ID;
                } 
                catch(Exception ex)
                {
                    //throw new Exception( ex.Message);
                }               
            }
            return NeedID;
        }
智远软件 2017-05-16
  • 打赏
  • 举报
回复
引用 15 楼 zuiyanmili 的回复:
[quote=引用 11 楼 sp1234 的回复:] [quote=引用 3 楼 OldEagle33032 的回复:] 哪要怎么写呀
EF 教程上教你怎么写,你就学习它的做法。不要心机太重,要先学会简单、正规的东西。[/quote] 除了瞎JB逼逼和吐槽你还会干嘛,人家问的是怎么写,需要你这样废话吗[/quote] 似乎他大部分的回复都是这个腔调,一副高高在上的样子
ruilovechu 2017-04-22
  • 打赏
  • 举报
回复
引用 15 楼 zuiyanmili 的回复:
[quote=引用 11 楼 sp1234 的回复:] [quote=引用 3 楼 OldEagle33032 的回复:] 哪要怎么写呀
EF 教程上教你怎么写,你就学习它的做法。不要心机太重,要先学会简单、正规的东西。[/quote] 除了瞎JB逼逼和吐槽你还会干嘛,人家问的是怎么写,需要你这样废话吗[/quote] 非常同意。
zuiyanmili 2017-01-07
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
[quote=引用 3 楼 OldEagle33032 的回复:] 哪要怎么写呀
EF 教程上教你怎么写,你就学习它的做法。不要心机太重,要先学会简单、正规的东西。[/quote] 除了瞎JB逼逼和吐槽你还会干嘛,人家问的是怎么写,需要你这样废话吗
tanktang811010 2016-08-05
  • 打赏
  • 举报
回复
楼主我觉得这是个数据库设计观念的问题,如果你设置在数据库中字段是自增长,那么你就不应该关心数据写入后这个字段到底多少了.否则的话你应该在代码中实现新数据的某项ID自增长。
SoulRed 2016-08-01
  • 打赏
  • 举报
回复
简单:在程序开始运行时,设立一个volatile 变量 例如: volatile int DBID=0; 然后用数据库中的最后一个自增ID初始化他 在程序每次更新数据时,自增他 \ DBID++ 如果是多线程环境,请用lock或者interlocked.increment 其实只是思路的问题。希望能帮到你
a191046083 2016-08-01
  • 打赏
  • 举报
回复
用主外建 或者全局变量来处理吧
  • 打赏
  • 举报
回复
引用 3 楼 OldEagle33032 的回复:
哪要怎么写呀
EF 教程上教你怎么写,你就学习它的做法。不要心机太重,要先学会简单、正规的东西。
software_artisan 2016-07-30
  • 打赏
  • 举报
回复
持久化前肯定是不知道那个自增值是什么的,楼主不用想了。如果你非要知道写数据库后的自增值是什么,很简单啊。

Student  student = CurrentDal.AddEntity(student entity);
classentity.student Id = student .id;
CurrentDB .classentityDal.AddEntity(classentity);
CurrentDBSession.SaveChange ();
return student.id
秋的红果实 2016-07-30
  • 打赏
  • 举报
回复
你的对象是和数据库的表关联吗,这个就相当于数据库字段自增 这总问题,没法获得增加后的值,还是改主键吧,如用GUID做主键,程序里生成的,不是“自增”的,如此才方便控制
q107770540 2016-07-30
  • 打赏
  • 举报
回复
Student student = ...; classentity.student = student ; CurrentDB .classentityDal.AddEntity(classentity); return CurrentDBSession.SaveChange ();
OldEagle33032 2016-07-29
  • 打赏
  • 举报
回复
哪这样说只有用存储过程或SQL语句了是吧
xuzuning 2016-07-29
  • 打赏
  • 举报
回复
自增长ID 自然是在插入数据后获取 虽然你可以通过取得最后一次的值来推演,但数据库不是你一个人用的 你怎么去保证你推演出的 id 不在一来一去间,被其他人使用了呢?
  • 打赏
  • 举报
回复
如果是自增长,那个是数据库生成的,肯定得提交成功才能取到 EF是靠对象之间的关系来提交的,你不需要去给关联字段赋值,只需要把业务关系理清楚,在程序中相应地建模
xiaoqiu_net 2016-07-29
  • 打赏
  • 举报
回复
换其他办法来解决问题。
OldEagle33032 2016-07-29
  • 打赏
  • 举报
回复
哪要怎么写呀
加载更多回复(2)

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧