首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用主键通过构造函数初始化EF(6)对象(最佳实践?)

使用主键通过构造函数初始化EF(6)对象(最佳实践?)
EN

Stack Overflow用户
提问于 2016-02-08 19:21:52
回答 1查看 340关注 0票数 2

我在谷歌上搜索了一整天,都没找到答案。这似乎是个简单的话题,也许我找错了.但请原谅我这是个复制品..。

目前,在项目中,所有数据访问级别的对象都是由部分类中的方法初始化的。因此,它被创建,具有全局空值,然后我们在其上调用一个自定义get方法,其中包含以下几个变体:

代码语言:javascript
复制
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()如此简单,并且在主键上工作得如此顺利,难道不应该有一种方法将其放入构造函数中吗?只需创建对象

代码语言:javascript
复制
MyObject myObject = New MyObject(MyPrimaryKey);

就像我说的,我已经搜索了整个上午,寻找ef6的构造函数,以及主键的构造函数.似乎找不到一个显而易见的答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 19:26:41

不将该逻辑放入构造函数的主要原因是,然后该类将耦合到存储库中。通过将创建逻辑保持在类本身之外,您可以将类与存储机制分离开来。

假设您想使用不同的存储库(比如用于测试的平面文件)。如果您的存储库访问是在构造函数中进行的,则必须有复杂的逻辑才能基于某些外部触发器选择存储库,或者使用不同的签名,因为不能有多个具有相同签名的构造函数。

另外,考虑一下构造函数会是什么样子:

代码语言:javascript
复制
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`
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35277595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档