-2

エンティティフレームワークでは、新しいアイテムをコミットしても、データベースに従ってIDが更新されません。例えば:

public class A  {
    public int Id {get; set;}
    public DateTime LastUpdateUtc {get; set;}
}

リポジトリに新しいAを追加すると、次のようになります。

A a = new A();
a.LastUpdateUtc = DateTime.UtcNow;
repo.Add(a);
repo.SaveChange();
a.Id; // still == 0

リポジトリで要素を検索してもAが表示されますが、Idは0のままです。

A a = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc ).First();
a.Id; // still == 0

データベースが計算したものからIdフィールドを更新するようにエンティティフレームワークに指示する方法を誰かが知っていますか?

ありがとう

4

4 に答える 4

0

ID列にAUTONUMBERプロパティがある場合、エンティティフレームワークはデータベースから新しく自動生成されたIDフィールドを自動的に取得します。IDデータが実際に0でないことを確認するために、データベースを調べましたか?

于 2012-06-07T14:04:08.853 に答える
0

これを試してください

public override TR Create<T, TR>(T entity)
{
    string entitySet = GetEntitySetName<T>();
    _context.AddObject(entitySet, entity);
    _context.SaveChanges();

    //Returns primaryKey value
    return (TR)context.CreateEntityKey(entitySet, entity).EntityKeyValues[0].Value;                       
} // Where T: entity type, TR: entity PK type

そしてそれが大丈夫なら-ここを見てくださいEFジェネリックリポジトリは新しく挿入されたジェネリックエンティティからIDを取得します

于 2012-06-07T14:04:53.237 に答える
0

それ以外の

A a = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc ).First();
a.Id;

試す

A queryA = repo.Asquerable().OrderByDescending(a => a.LastUpdateUtc);
queryA.First().Id;

aこの場合はエンティティ(クエリではない)であり、変更されません

于 2012-06-07T14:16:21.173 に答える
0

最終的に、私は属性を追加することによってそれを機能させました:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
于 2012-11-23T10:23:44.343 に答える