0

我面临一个需要防止直接创建实体对象的场景。

我正在使用代码优先。我想在某个地方有一个方法,我应该能够使用它来创建对象。有什么常用的做法吗?

4

1 回答 1

1

EF 可以与具有私有/受保护构造函数的实体一起使用。

所以让我们来看看这个示例上下文:

public class MyEntity
{
    protected MyEntity() { }

    public int Id { get; set; }

    public string Name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
}

然后创建一个实体new MyEntity()会导致编译错误。

但是您仍然可以使用DbSet.Create myContext.MyEntities.Create();通过 EF 创建实体,并且所有其他操作MyEntity都将按预期工作,例如查询和更新等。

当然你也可以有一个静态工厂方法MyEntity来管理对象的创建

public class MyEntity
{

    //...

    public static MyEntity MyCreate()
    {
        return new MyEntity();
    }
}
于 2012-06-28T05:09:57.677 回答