C# 我可以将实体框架模型逻辑封装到模型本身吗?

C# 我可以将实体框架模型逻辑封装到模型本身吗?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,在使用实体框架时,我为我想要的每个模型制作标准的C#类。因此,如果我有一个汽车模型,它可能会如下所示: public class Car { public string Model { get; set; } } 为了管理数据库中的汽车模型,我创建了一个DbContext类,其中包含DbSet属性。这很好,但我觉得没有必要使用额外的DbContext类。有没有一种方法可以让我的Car模型类自己管理自己的DbSet 我试图看看是否可以使用以下工作流程: var db = new MyDb

在使用实体框架时,我为我想要的每个模型制作标准的C#类。因此,如果我有一个汽车模型,它可能会如下所示:

public class Car
{
    public string Model { get; set; }
}
为了管理数据库中的汽车模型,我创建了一个
DbContext
类,其中包含
DbSet
属性。这很好,但我觉得没有必要使用额外的
DbContext
类。有没有一种方法可以让我的
Car
模型类自己管理自己的
DbSet

我试图看看是否可以使用以下工作流程:

var db = new MyDbContextClass();
var cars = db.Cars.ToList();
var cars = Car.ToList();

这可能吗

您可以用这种方式包装
DbContext
,但它可能会使您实现比预期更多的内容,以便在降低性能的同时使其工作

我认为你最好保持原样,因为我看不出你提到的那样做有什么好处。 您正在将
DbContext
耦合到模型,并尝试创建超级对象—负责数据表示和数据访问层的对象

这导致了一个糟糕的设计和违反


不要试图以糟糕的设计为代价来减少代码行的数量。

您可以用这种方式包装
DbContext
,但它可能会使您实现的代码比预期的要多,以便在降低性能的同时使其工作

我认为你最好保持原样,因为我看不出你提到的那样做有什么好处。 您正在将
DbContext
耦合到模型,并尝试创建超级对象—负责数据表示和数据访问层的对象

这导致了一个糟糕的设计和违反


不要试图以糟糕的设计为代价减少代码行的数量。

似乎您需要一种称为活动记录模式的东西。EF的设计没有考虑到这种模式。与其强迫它这么做,不如改用另一个ORM?像

似乎您需要一种叫做活动记录模式的东西。EF的设计没有考虑到这种模式。与其强迫它这么做,不如改用另一个ORM?像

当然可能,但有什么好处?除了化妆品以外,不确定还有什么好处;减少代码行并需要创建上下文类。也许只是为了让我可以将所有特定于汽车的代码也保留在汽车类中。数据检索不是特定于实体的。这是另一个类db上下文的责任。域实体应该不知道它们的存储/检索方式。当然可能,但好处是什么?不确定除了化妆品以外还有什么好处;减少代码行并需要创建上下文类。也许只是为了让我可以将所有特定于汽车的代码也保留在汽车类中。数据检索不是特定于实体的。这是另一个类db上下文的责任。域实体应该不知道它们的存储/检索方式。
var cars = Car.ToList();