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 回答