Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用setter处理数据库_C# - Fatal编程技术网

C# 使用setter处理数据库

C# 使用setter处理数据库,c#,C#,在项目中,我有一个类-model类(称这个类为-modelClass) 我有一个类(称这个类为-dbClass),它提供了一些使用数据库的方法(db-Advantage数据库体系结构)。此类提供了使用数据库的静态方法。我知道我可以使用一些ORM(比如EF)、repository模式,但在这个项目中,使用数据库的主要思想是使用静态方法的静态类 在modelClass中,我有一个字段-“状态””(字符串类型) 我的用例是在设置字段“状态””时更新数据库中的记录 您可以在下面看到我的解决方案: pub

在项目中,我有一个类-model类(称这个类为-
modelClass

我有一个类(称这个类为-
dbClass
),它提供了一些使用数据库的方法(db-Advantage数据库体系结构)。此类提供了使用数据库的静态方法。我知道我可以使用一些ORM(比如EF)、repository模式,但在这个项目中,使用数据库的主要思想是使用静态方法的静态类

在modelClass中,我有一个字段-“
状态”
”(字符串类型)

我的用例是在设置字段“
状态”
”时更新数据库中的记录

您可以在下面看到我的解决方案:

public class modelClass{
    //here some fileds
    public string Status { get; set; }
    //here some fileds
}

public class dbClass{
    //here some fileds and method for work with database
    public static void update(modelClass mClass){
        //here update the record in database
    }
}
使用

我想出了另一个解决办法

我决定使用关键字“
set

让我解释一下我的想法——当我在modelClass中设置字段时,我想在数据库中设置字段并更新记录

例如:

public class modelClass{
    //here some fileds
    private string Status { get; set; }

    //create public setter
    public string setStatus{
        get { return Status; }
        set
        {
            Status = value;
            dbClass.update(this);
        }
    }

    //here some fileds
}
使用

主要问题是:

  • setter使用数据库是否是良好的实践
  • 为什么我应该/不应该使用这个想法
  • 请给我解释一下我的想法的主要利弊

  • 不,这不是个好习惯

    原因有二:

  • 它将经常与数据库同步
  • 手动为数据库中的每一列创建setter是不方便的
  • 通常,ORM实现有一种遍历所有属性的方法,例如,使用反射


    此外,它还有一个“save”方法,这样您可以在完成字段赋值后,在对数据库的一次调用中刷新值。

    不,这不是一个好的做法

    原因有二:

  • 它将经常与数据库同步
  • 手动为数据库中的每一列创建setter是不方便的
  • 通常,ORM实现有一种遍历所有属性的方法,例如,使用反射


    此外,它还有一个“save”方法,这样您可以在完成字段赋值后,在对数据库的一次调用中刷新值。

    不,这不是一个好的做法

    原因有二:

  • 它将经常与数据库同步
  • 手动为数据库中的每一列创建setter是不方便的
  • 通常,ORM实现有一种遍历所有属性的方法,例如,使用反射


    此外,它还有一个“save”方法,这样您可以在完成字段赋值后,在对数据库的一次调用中刷新值。

    不,这不是一个好的做法

    原因有二:

  • 它将经常与数据库同步
  • 手动为数据库中的每一列创建setter是不方便的
  • 通常,ORM实现有一种遍历所有属性的方法,例如,使用反射


    此外,它还有一个“save”方法,这样您可以在完成字段分配后,在一次对数据库的调用中刷新值。

    因此您试图区分以某种方式映射到数据库的类和业务逻辑使用的类。我认为这是个好主意。 您正在考虑在域驱动设计中也会发现的元素,其中域“不知道持久性”,即不知道如何、在何处或以何种形式持久化

    然而,我认为有更优雅的方法来实现它。通过将dbclass“包装”到模型类中,您可以创建一个从模型到数据库的依赖关系,而这正是您试图避免的事情

    我看到使用的是模型类,以及这些模型类的I假设。存储库的实现是了解持久性介质的实现。可能是EF对抗SQL server,也可能是Azure

    在更新的情况下,此repo将从数据库中删除dbclass,然后从提供的modelclass(您所称的)中更新属性。例如,您可以使用来处理此映射。如果您的所有属性都具有相同的名称和类型,那么它只是一行:

    OrderDto dto = Mapper.Map<OrderDto>(order);
    
    OrderDto-dto=Mapper.Map(order);
    
    因此,您试图区分以某种方式映射到数据库的类和业务逻辑使用的类。我认为这是个好主意。 您正在考虑在域驱动设计中也会发现的元素,其中域“不知道持久性”,即不知道如何、在何处或以何种形式持久化

    然而,我认为有更优雅的方法来实现它。通过将dbclass“包装”到模型类中,您可以创建一个从模型到数据库的依赖关系,而这正是您试图避免的事情

    我看到使用的是模型类,以及这些模型类的I假设。存储库的实现是了解持久性介质的实现。可能是EF对抗SQL server,也可能是Azure

    在更新的情况下,此repo将从数据库中删除dbclass,然后从提供的modelclass(您所称的)中更新属性。例如,您可以使用来处理此映射。如果您的所有属性都具有相同的名称和类型,那么它只是一行:

    OrderDto dto = Mapper.Map<OrderDto>(order);
    
    OrderDto-dto=Mapper.Map(order);
    
    因此,您试图区分以某种方式映射到数据库的类和业务逻辑使用的类。我认为这是个好主意。 您正在考虑在域驱动设计中也会发现的元素,其中域“不知道持久性”,即不知道如何、在何处或以何种形式持久化

    然而,我认为有更优雅的方法来实现它。通过将dbclass“包装”到模型类中,您可以创建一个从模型到数据库的依赖关系,而这正是您试图避免的事情

    我所看到的被使用的是
    OrderDto dto = Mapper.Map<OrderDto>(order);