エンティティフレームワークは1つのdbフィールド値をスキップします

エゴール

「コードファースト」の方法論を理解するためだけに、非常に小さなプロジェクトがあります。

'code first'を使用してデータベースを作成し、オブジェクトを追加すると、正常に機能し、オブジェクトのすべてのプロパティがデータベースに保存されます。次に、保存されたオブジェクトを取得しようとします。オブジェクトを返しますが、1つのプロパティは常にnullです。

誰かが私のコードの何が問題になっているのか説明できますか?

エンティティクラス

public class Item
{
    public Guid Id { get; set; }                
    public string OwnerId { get; set; }
    public DateTime CreationDate { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool IsStoreItem { get; set; }
    public decimal Price { get; set; }
    public int Count { get; set; }                          
    public string TopBidderId { get; set; }                 
    public Material Material { get; set; }
    public ItemStatus Status { get; set; }
    public int KrauseNumber { get; set; }                
}

データベースエンティティ

public class ApplicationDbContext : IdentityDbContext<ApplicationIdentityUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false) { }

    public DbSet<Item> Items { get; set; }
    public static ApplicationDbContext Create() => new ApplicationDbContext();                
    }
}

ジェネリックレポ

public class EfGenericRepository<T> : IEfGenericRepository<T> where T : class
{
    internal readonly ApplicationDbContext _dbContext;
    internal readonly DbSet<T> _dbSet;

    public EfGenericRepository(ApplicationDbContext dbContext)
    {
        _dbContext = dbContext;
        _dbSet = _dbContext.Set<T>();
    }

    public virtual IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
    {
        IQueryable<T> query = _dbSet;

        if (filter != null)
        {
            query = query.Where(filter);
        }

        foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
        {
            query = query.Include(includeProperty);
        }

        if (orderBy != null)
        {
            return orderBy(query).ToList();
        }
        else
        {
            return query.ToList();
        }
    }
}

エンティティを取得してみてください

public void GetEntity(Guid id)
{
    var context = new Repository();
    var auction = context.ItemRepository.Get().FirstOrDefault(i => i.Id == id);                
}

結果は

ここに画像の説明を入力してください

更新

また、私は言わなければなりません、それ

var request = "SELECT TopBidderId FROM Items WHERE Id = '*item_id*'";
var result = _dbContext.Database.SqlQuery<string>(request).FirstOrDefaultAsync().Result;

うまく機能し、絶対に正しい値を返します。

ブビ

モデルについては、MaterialとItemStatusは列挙型だと思います。それ以外の場合は、プロパティを仮想としてマークすることをお勧めします(遅延読み込みの場合)。

また、リポジトリの実装についてもよくわかりません。各EfGenericRepositoryには独自のコンテキストがあり、それが優れた設計であるかどうかはわかりませんが、質問の対象ではありません。

答え:
モデルにはTopBidderIdという名前の文字列プロパティが含まれています。データベースを作成するとき、フィールドタイプは「text」(最近のSQL Serverのvarchar(max)、MySQL、CLOBなどのテキスト)に似ています。そのため、その中に文字列を書くことができます。あなたの場合、それはGUIDのToStringのようです。コンテンツを読み取ると、文字列がTopBidderIdプロパティに挿入されます。
これが起こらない方法はありません。テキスト(またはvarchar(max))列をモデルのTopBidderIdの文字列に変換できます。

ちなみに、私はあなたのコードを実行しようとしました(IdentityDbContextからではなくコンテキストから開始し、2つの欠落している列挙型とリポジトリクラスを追加します、デフォルトの移行)、それは期待どおりに機能します。

では、なぜあなたの場合はうまくいかないのですか?データベースモデルがエンティティモデルに対応していないと思います(TopBidderId列はテキストでもvarchar maxでもありません)。通常は発生しませんが、発生する場合があります。たとえば、モデルチェック(エンティティモデルと__MigrationHistoryテーブルのコンテンツの間のチェック)を無効にした場合、またはデータベースの移行後にTopBidderId列タイプを変更した場合です。

もう1つのケースは、エンティティモデルがここに投稿したものと異なる場合です(TopBidderIdは、タイプBidderのプロパティTopBidderによって使用される外部キーです)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

エンティティフレームワークは3つのテーブルを結合します

分類Dev

エンティティフレームワークは、1対0または1つの関係をカスケードします

分類Dev

エンティティフレームワークはコンテキストからエンティティをリロードします

分類Dev

エンティティフレームワークはコンテキストからエンティティをリロードします

分類Dev

エンティティフレームワーク、クラスをキー/値テーブルにマップできますか?

分類Dev

最初にエンティティフレームワークコード、外部キー値へのアクセスを取得します

分類Dev

クエリのようなエンティティフレームワークはテキストボックスから入力を取得します

分類Dev

エンティティフレームワークのストアドプロシージャから戻り値をフェッチする方法は?

分類Dev

エンティティフレームワークは先月のレコードを選択します

分類Dev

エンティティフレームワーク:プリンシパルの外部キーとの1対0または1つの関係

分類Dev

エンティティフレームワーク:1回のラウンドトリップで複数のコマンドを実行します

分類Dev

エンティティフレームワークコード最初の関係は問題を保存します

分類Dev

エンティティフレームワーク:*のエンティティは*関係に参加します

分類Dev

エンティティフレームワークデータベースの最初のスキャフォールドdbcontextはエンティティナビゲーションを有効にしません

分類Dev

linq c#でエンティティフレームワークを使用して2つのテーブル結合レコードを取得する方法は?

分類Dev

エンティティフレームワーク:独自のモデルタイプのリストは他のエントリを削除します

分類Dev

Mongodbクエリは、テキストフィールドを持つ複合インデックスにプレフィックスを使用しません

分類Dev

エンティティフレームワーク6コードファーストアプローチで2つのテーブル間に1対多および多対1のマッピングを作成する

分類Dev

角度グリッドには、インライン剣道グリッドのエディターテンプレート(リアクティブフォーム)を含む列があります。テンプレートコントロール(テキストボックス)とフォームはリンクしません

分類Dev

TableBatchOperationは、すべてのエンティティが同じタイムスタンプフィールド値を持つことを保証しますか?

分類Dev

別の結合されたエンティティフィールド値に従って1つのエンティティをクエリします

分類Dev

エンティティフレームワークコードは、最初に多対多のデータベーステーブルを作成しません

分類Dev

エンティティフレームワークの統合テスト-PRODのシードメソッド呼び出しのみを分離します-

分類Dev

エンティティ作成時のTableName(含む/正規表現)-エンティティフレームワーク-テーブルプレフィックス

分類Dev

レコードエンティティフレームワークのリストをバッチ更新する

分類Dev

エンティティフレームワークは、自己順序で子コレクションを持つエンティティを取得します

分類Dev

c#は、各グループに存在するレコードを取得しますASP.NETMVCエンティティフレームワーク

分類Dev

エンティティフレームワークはビット値を更新しません

分類Dev

エンティティフレームワーク:複数のエンティティが同じ主キー値を持っています

Related 関連記事

  1. 1

    エンティティフレームワークは3つのテーブルを結合します

  2. 2

    エンティティフレームワークは、1対0または1つの関係をカスケードします

  3. 3

    エンティティフレームワークはコンテキストからエンティティをリロードします

  4. 4

    エンティティフレームワークはコンテキストからエンティティをリロードします

  5. 5

    エンティティフレームワーク、クラスをキー/値テーブルにマップできますか?

  6. 6

    最初にエンティティフレームワークコード、外部キー値へのアクセスを取得します

  7. 7

    クエリのようなエンティティフレームワークはテキストボックスから入力を取得します

  8. 8

    エンティティフレームワークのストアドプロシージャから戻り値をフェッチする方法は?

  9. 9

    エンティティフレームワークは先月のレコードを選択します

  10. 10

    エンティティフレームワーク:プリンシパルの外部キーとの1対0または1つの関係

  11. 11

    エンティティフレームワーク:1回のラウンドトリップで複数のコマンドを実行します

  12. 12

    エンティティフレームワークコード最初の関係は問題を保存します

  13. 13

    エンティティフレームワーク:*のエンティティは*関係に参加します

  14. 14

    エンティティフレームワークデータベースの最初のスキャフォールドdbcontextはエンティティナビゲーションを有効にしません

  15. 15

    linq c#でエンティティフレームワークを使用して2つのテーブル結合レコードを取得する方法は?

  16. 16

    エンティティフレームワーク:独自のモデルタイプのリストは他のエントリを削除します

  17. 17

    Mongodbクエリは、テキストフィールドを持つ複合インデックスにプレフィックスを使用しません

  18. 18

    エンティティフレームワーク6コードファーストアプローチで2つのテーブル間に1対多および多対1のマッピングを作成する

  19. 19

    角度グリッドには、インライン剣道グリッドのエディターテンプレート(リアクティブフォーム)を含む列があります。テンプレートコントロール(テキストボックス)とフォームはリンクしません

  20. 20

    TableBatchOperationは、すべてのエンティティが同じタイムスタンプフィールド値を持つことを保証しますか?

  21. 21

    別の結合されたエンティティフィールド値に従って1つのエンティティをクエリします

  22. 22

    エンティティフレームワークコードは、最初に多対多のデータベーステーブルを作成しません

  23. 23

    エンティティフレームワークの統合テスト-PRODのシードメソッド呼び出しのみを分離します-

  24. 24

    エンティティ作成時のTableName(含む/正規表現)-エンティティフレームワーク-テーブルプレフィックス

  25. 25

    レコードエンティティフレームワークのリストをバッチ更新する

  26. 26

    エンティティフレームワークは、自己順序で子コレクションを持つエンティティを取得します

  27. 27

    c#は、各グループに存在するレコードを取得しますASP.NETMVCエンティティフレームワーク

  28. 28

    エンティティフレームワークはビット値を更新しません

  29. 29

    エンティティフレームワーク:複数のエンティティが同じ主キー値を持っています

ホットタグ

アーカイブ