Entity framework 如何获取EF代码第一个DbContext事务行标识?

Entity framework 如何获取EF代码第一个DbContext事务行标识?,entity-framework,transactions,ef-code-first,transactionscope,Entity Framework,Transactions,Ef Code First,Transactionscope,是否可以在SaveChanges方法之后但在TransactionScope.Complete调用之前获取记录的标识?我们是否需要强制转换到ObjectContext才能获得此功能 当我们使用MSDTC将消息发送到单独服务器上的事务队列时,我们需要这样做 例如: static void Main(string[] args) { const string qName = ".\\Private$\\DbContextTransactions"; var db = new Blog

是否可以在SaveChanges方法之后但在TransactionScope.Complete调用之前获取记录的标识?我们是否需要强制转换到ObjectContext才能获得此功能

当我们使用MSDTC将消息发送到单独服务器上的事务队列时,我们需要这样做

例如:

static void Main(string[] args)
{
    const string qName = ".\\Private$\\DbContextTransactions";
    var db = new BlogDb();

    // force db creation & create queue
    Console.WriteLine("Count={0}", db.Posts.Count());
    if (!MessageQueue.Exists(qName))
        MessageQueue.Create(qName, true); // transactional

    try
    {
        using (var t = new TransactionScope())
        using (MessageQueue q = new MessageQueue(qName))
        {
            var post = new Post() { Title = "Test " + DateTime.Now.Ticks.ToString() };
            db.Posts.Add(post);
            db.SaveChanges();

            // TODO: how do we get post.Id (updated identity)?

            q.Send(post.Id, MessageQueueTransactionType.Automatic);
            t.Complete();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }

    Console.WriteLine("Count={0}", db.Posts.Count());
    Console.ReadLine();
}

在调用
SaveChanges
后,应该始终设置标识值,即使在调用
SaveChanges
后的
TransactionScope

中也是如此。Id应该由数据库中的正确标识填充。我们发现“enlist=false”在我们的连接字符串中,它导致了事务未登记的问题。这不是我们在4.2和4.3中看到的