来自数据库的EF 6模型,我在哪里放置上下文?

时间:2014-09-29 09:13:21

标签: c# entity-framework-6

我正在使用Entity Framework 6.我使用它从现有数据库生成我的类。我正在使用另一个分类向这些类添加一些字段和方法。我的问题是我应该把目标放在哪里。

即。我创建了一个新的构造函数,它接受我的上下文并创建一个新对象并将其添加到 上下文:

public partial class EntityClass1
{
    private readonly EntitiesContext dbContext;
    private String customString1;
    private bool justInitialized;

    public EntityClass1(EntitiesContext dbContext)
    {
        this.dbContext = dbContext;
        dbContext.EntityClass1.Add(this);
        customString1 = "voila";
        justInitialized = true;
    }

    public MethodUpdateString()
    {
        customString1 = "UPDATED";
        var entity2 = new EntityClass2();
        entity2.EntityClass1Id = this.Id;
        dbContext.EntityClass2.Add(entity2);
        dbContext.SaveChanges();
    {
}

public partial class EntityClass2
{
    //Some code here
}


public MainClass{
    static void Main(){
        using (var dbContext = new EntitiesContext())
        {
            //other operations on the context here

            var e1 = new EntityClass1(dbContext);
            e1.MethodUpdateString();   

            //other operations on the context here
        }  
    }
}

我不知道为什么,但我对这种可能的实施方式并不满意。例如,在方法MethodUpdateString()中添加上下文参数会更好吗?另外,因为我做了SaveChamges,我结束了交易。

1 个答案:

答案 0 :(得分:0)

你的直觉是正确的,无论是在尝试使用构造函数注入还是在模型类中都不熟悉数据访问逻辑。另一种实现方式是:

public partial class EntityClass1Service
{
    private readonly EntitiesContext dbContext;

    public EntityClass1Service(EntitiesContext dbContext)
    {
        this.dbContext = dbContext;
    }

    public MethodUpdateString(EntityClass1 entityClass1Object)
    {
        entityClass1Object.CustomString1 = "UPDATED";
        dbContext.EntityClass1.Add(entityClass1Object);
        var entity2 = new EntityClass2();
        entity2.EntityClass1Id = entityClass1Object.Id;
        dbContext.EntityClass2.Add(entity2);
        dbContext.SaveChanges();
    }
}

您可能还想在MethodUpdateString中添加try-catch块,并可能将customString1更改为公共属性。