none
EF访问数据库的事务 RRS feed

  • 问题

  • 数据库中有表A,A中有Id(bigint),Name(nvachar);其中Id是数据库自动生成的,自动加1的序号

    现在我用EF访问,生成的类为:

    class A

    {

    public long Id;

    public string Name;

    }

    假设上下文对象为B;

    A a=new A(){Name="link"};

    B.A.AddObject(a);

    B.SaveChanges(SaveOptions.DetectChangesBeforeSave);<<<此时已经保存到数据库中了,且DetectChangesBeforeSave就能保证a中获取到新的自动生成的Id;但是如何实现未真正保存到数据库,同时又能得到自动生成的Id??

    使用场景:因为要先发给数据库准备保存,但是未正在保存到数据库并返回自动生成的Id,处理完一下其他事情后决定是否要将数据真正存入数据库。

    紧急求救!!!


    证明自己存在

    2012年4月26日 15:56

答案

  • 您好,Id是数据库自动生成的,如果您不将数据保存到数据库,是无法得到Id的。如果Id是递增的,你可以在保存前查询数据库最后一条数据的Id,并加1当作新纪录的Id。但这样做的劣势是,如果在你对该数据进行处理的时候,有新的数据插入到了数据库占据了该Id的值,在您将您的数据插入数据库时,会产生不同的Id。所以还是建议您让数据库来管理您的Id。不明白您的发给数据库准备保存时什么意思。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月27日 3:22
    版主

全部回复

  • 或许你可以参考这篇文章中的做法。

    http://msdn.microsoft.com/en-us/library/bb738523.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年4月27日 0:54
  • 您好,Id是数据库自动生成的,如果您不将数据保存到数据库,是无法得到Id的。如果Id是递增的,你可以在保存前查询数据库最后一条数据的Id,并加1当作新纪录的Id。但这样做的劣势是,如果在你对该数据进行处理的时候,有新的数据插入到了数据库占据了该Id的值,在您将您的数据插入数据库时,会产生不同的Id。所以还是建议您让数据库来管理您的Id。不明白您的发给数据库准备保存时什么意思。


    Allen Li [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月27日 3:22
    版主