我在谷歌上搜索了一整天,都没找到答案。这似乎是个简单的话题,也许我找错了.但请原谅我这是个复制品..。
目前,在项目中,所有数据访问级别的对象都是由部分类中的方法初始化的。因此,它被创建,具有全局空值,然后我们在其上调用一个自定义get方法,其中包含以下几个变体:
public MyObject GetMyObjectByID(int myPrimaryKey)
{
using (var db = new myContext())
{
MyObject myObject = new MyObject();
myObject = db.MyObjects.Find(myObject.primaryKey = myPrimaryKey);
return myObject;
}
}...and将创建的MyObject分配给初始对象。
所以这很管用..。但好像有很多人到处乱跑。如果find()如此简单,并且在主键上工作得如此顺利,难道不应该有一种方法将其放入构造函数中吗?只需创建对象
MyObject myObject = New MyObject(MyPrimaryKey);就像我说的,我已经搜索了整个上午,寻找ef6的构造函数,以及主键的构造函数.似乎找不到一个显而易见的答案。
发布于 2016-02-08 19:26:41
不将该逻辑放入构造函数的主要原因是,然后该类将耦合到存储库中。通过将创建逻辑保持在类本身之外,您可以将类与存储机制分离开来。
假设您想使用不同的存储库(比如用于测试的平面文件)。如果您的存储库访问是在构造函数中进行的,则必须有复杂的逻辑才能基于某些外部触发器选择存储库,或者使用不同的签名,因为不能有多个具有相同签名的构造函数。
另外,考虑一下构造函数会是什么样子:
public MyObject (int pk)
{
db = // get repository
// can't say "this = ...", so we have to create a temporary object and copy.
MyObject temp = db.MyObjects.Find(myObject.primaryKey = myPrimaryKey);
// copy properties of `temp` to `this`
}https://stackoverflow.com/questions/35277595
复制相似问题