是否有必要将对象实例化为EF Context

时间:2014-02-03 15:58:59

标签: c# entity-framework entity-framework-5 edmx

我有一个EF edmx(BaseEntities)。作为业务需求,我创建了两个名为的文件。 QTDAL和AdminDAL。

请参阅以下代码。我的两个类(QTDAL,AdminDAL)继承了BaseEntities。 (注意:我不确定是否允许这样做)

(现在没有错误) 如果有更好的解决方案可以提供以下代码,我想提出建议。

有任何建议吗?

public void TestMethod1()
    {
        IQTDAL qtContext = new QTDAL();

        var value = qtContext.AllCampaigns().FirstOrDefault();
        //var value = qtContext.AddOrUpdateCampaign(TestCampaign);

        Assert.IsNotNull(value);
    }

示例:

    public partial class BaseEntities : DbContext
{
    public BaseEntities()
        : base("name=BaseEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Campaign> Campaigns { get; set; }
    public virtual DbSet<User> Users { get; set; }

}

    public class QTDAL : BaseEntities, IQTDAL
{
    public IEnumerable<Campaign> AllCampaigns()
    {
        return Campaigns.ToList();
    }

    public int AddOrUpdateCampaign(Campaign campaign)
    {
        Campaigns.AddOrUpdate(campaign);
        return SaveChanges();
    }

    public int DeleteCampaign(Campaign campaign)
    {
        Campaigns.Remove(campaign);
        return SaveChanges();
    }
}


    public class AdminDAL : BaseEntities, IAdminDAL
{
    public IEnumerable<User> AllUsers()
    {
        return Users;
    }

    public int AddOrUpdateUser(User user)
    {
        Users.AddOrUpdate(user);
        return SaveChanges();
    }

    public int DeleteUser(User user)
    {
        Users.Remove(user);
        return SaveChanges();
    }
}

1 个答案:

答案 0 :(得分:1)

嗯,你当然 CAN 继承你的背景,但真正的问题是你为什么会这样做?

继承是一种用于创建“是一种”关系的概念。换句话说,您的QTDAL“是一个”BaseEntities。因此,您可以将QTDAL视为BaseEntities对象。您似乎没有那样使用它。相反,您似乎想要包装BaseEntities功能。

在这种情况下,您应该只使用BaseEntities作为QTDAL类的成员。