代码之家  ›  专栏  ›  技术社区  ›  Andreas

使用亚音速SimpleRepository AddMany时获取Id

  •  1
  • Andreas  · 技术社区  · 16 年前

    当我在亚音速SimpleRepository中使用AddMany函数时,如何将Id返回到对象。我的所有对象在使用它之后仍然得到Id=0。

    SimpleRepository repository = new SimpleRepository(ConnectionStringName);
    repository.AddMany<T>(insertList);
    

    从源头上看,我可以看到:

    public void AddMany<T>(IEnumerable<T> items) where T : class, new()
    {
        if (_options.Contains(SimpleRepositoryOptions.RunMigrations))
        {
            Migrate<T>();
        }
    
        BatchQuery batch = new BatchQuery(_provider);
        foreach(var item in items)
        {
            batch.QueueForTransaction(item.ToInsertQuery(_provider));
        }
    
        batch.ExecuteTransaction();
    }
    

    在这个表中为最新插入的Id做一个批选择怎么样?那会返回错误的身份证吗?我会写下一些代码然后回来:)

    实际问题

    Insert User 
    Insert UserAccount -> Set UserAccount.fk_UserId to latest id inserted in User
    Insert User 
    Insert UserAccount -> Set UserAccount.fk_UserId to latest id inserted in User
    

    以此类推。。有可能吗? 这可能是10k或更多行乘以2。

    2 回复  |  直到 16 年前
        1
  •  1
  •   kamranicus    15 年前

    List ,否则使用简单的 foreach 不管你用什么变量:

    using (var ts = new TransactionScope()) {
        thangs.ForEach((t) => {
            t.Id = (int)Repository.Add<Thang>(t);
        });
        ts.Complete();
    }
    

    Repository SimpleRepository .

    TransactionScope 上课地点 System.Transactions (添加引用)。只要你的数据库支持它,它应该工作。。。

        2
  •  0
  •   Andreas    16 年前

    好吧,我解决了实际问题:

    IDataProvider provider = ProviderFactory.GetProvider(connectionStringName);
    
    LogEntry entry1 = CreateEntry("1");
    LogEntry entry2 = CreateEntry("2");
    LogEntry entry3 = CreateEntry("3");
    LogEntry entry4 = CreateEntry("4");
    
    List<LogEntry> items = new List<LogEntry>() { entry1, entry2 };
    
    BatchQuery batch = new BatchQuery();
    foreach (var item in items)
    {
        QueryCommand cmd = item.ToInsertQuery(provider).GetCommand();
        if (item != items.First())
        {
            cmd.CommandSql = cmd.CommandSql.Replace("@ins_LogEntriesfk_LogEntryId", "@@IDENTITY");
        }
        batch.QueueForTransaction(cmd);
    }
    
    batch.ExecuteTransaction();
    

    推荐文章