0

コンストラクターにいくつかの定義を持つクラスがあります。

public class Card
{
    public Card()
    {
        DateCreated = DateTime.Now;
    }
    public virtual DateTime DateCreated { get; set; }

}

私が以下を呼び出すと:

_repository.GetCard(cardId);

_repository には次のものが含まれます。

public Card GetCard(int cardId)
    {
        var card = _db.Cards.FirstOrDefault(s => s.CardId == cardId);  // happens immediately after this is hit
        if (card != null) return card;
        return null;
    }

コンストラクター コードがヒットしています (ブレークポイントを設定しました)。どうしてこれなの?私はC#が初めてです-コンストラクターがヒットするのは、オブジェクトがvar newCard = new Card();.

一部のオブジェクトでは、コンストラクターで新しいオブジェクトを作成するため (エンティティ作成をログに記録するための履歴エントリなど)、コンストラクター コードが頻繁にヒットするため、現在作成されているオブジェクトが多すぎるため、これが問題を引き起こしています。

_db コード:

public class AppDbContext : DbContext, IAppDbContext
{

    public AppDbContext() : base("name=TestConnection")
    {

    }

    public AppDbContext(string connectionString) : base(connectionString)
    {

    }

    public DbSet<Card> Cards { get; set; }

    void IAppDbContext.Save()
    {
        SaveChanges();
    }

    IQueryable<Card> IAppDbContext.Cards
    {
        get { return Cards; }
    }


 }
4

1 に答える 1

4

データベースから項目を取得するために EntityFramework を使用しています。それらを取得するとき、EF はデータを返すためにクラスのインスタンスを作成する必要があります。インスタンスを作成すると、明らかにコンストラクターがトリガーされます。他にどのようにしてクラスのインスタンスを返すことができるでしょうか? したがって、EF の奥深くで が呼び出さvar entity = new TEntity();れます。ここで、TEntity は Card クラスです。

これが、EF がモデル オブジェクトにパラメーターなしのコンストラクターを持つことを要求する理由でもあります。

于 2013-06-16T04:39:44.450 に答える