c# - Posso retornar o campo 'id' após uma inserção de LINQ?




.net linq-to-sql (4)

Quando eu entro em um objeto no banco de dados com Linq-to-SQL posso obter o id que acabei de inserir sem fazer outra chamada de banco de dados? Eu estou supondo que isso é bem fácil, eu simplesmente não sei como.


Answers

Tente isto:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;

Depois de confirmar seu objeto no banco de dados, o objeto recebe um valor em seu campo de ID.

Assim:

myObject.Field1 = "value";

// Db is the datacontext
db.MyObjects.InsertOnSubmit(myObject);
db.SubmitChanges();

// You can retrieve the id from the object
int id = myObject.ID;

Ao inserir o ID gerado é salvo na instância do objeto que está sendo salvo (veja abaixo):

protected void btnInsertProductCategory_Click(object sender, EventArgs e)
{
  ProductCategory productCategory = new ProductCategory();
  productCategory.Name = Sample Category”;
  productCategory.ModifiedDate = DateTime.Now;
  productCategory.rowguid = Guid.NewGuid();
  int id = InsertProductCategory(productCategory);
  lblResult.Text = id.ToString();
}

//Insert a new product category and return the generated ID (identity value)
private int InsertProductCategory(ProductCategory productCategory)
{
  ctx.ProductCategories.InsertOnSubmit(productCategory);
  ctx.SubmitChanges();
  return productCategory.ProductCategoryID;
}

referência: http://blog.jemm.net/articles/databases/how-to-common-data-patterns-with-linq-to-sql/#4


Se você realmente quiser uma cópia dos bytes subjacentes de uma string, você pode usar uma função como a que segue. No entanto, você não deve, por favor, ler para descobrir o porquê.

[DllImport(
        "msvcrt.dll",
        EntryPoint = "memcpy",
        CallingConvention = CallingConvention.Cdecl,
        SetLastError = false)]
private static extern unsafe void* UnsafeMemoryCopy(
    void* destination,
    void* source,
    uint count);

public static byte[] GetUnderlyingBytes(string source)
{
    var length = source.Length * sizeof(char);
    var result = new byte[length];
    unsafe
    {
        fixed (char* firstSourceChar = source)
        fixed (byte* firstDestination = result)
        {
            var firstSource = (byte*)firstSourceChar;
            UnsafeMemoryCopy(
                firstDestination,
                firstSource,
                (uint)length);
        }
    }

    return result;
}

Esta função irá obter uma cópia dos bytes subjacentes à sua string, muito rapidamente. Você obterá esses bytes da maneira que eles estão codificando no seu sistema. Essa codificação é quase certamente UTF-16LE, mas esse é um detalhe de implementação com o qual você não deveria se preocupar.

Seria mais seguro, mais simples e mais confiável ligar,

System.Text.Encoding.Unicode.GetBytes()

Com toda a probabilidade, isso dará o mesmo resultado, será mais fácil de digitar e os bytes sempre farão uma viagem de ida e volta

System.Text.Encoding.Unicode.GetString()






c# .net linq linq-to-sql