在C#中将值类型更改为引用类型的最佳方法是什么?

查尔斯·W

我定义了三个类,如下所示:

public class Base
{
    public int Id { get; set; }
}

public class Bar : Base { ... }

public class Foo : Base
{
    public int? ParentId { get; set; }
    public Base Parent { get; set; }

    public int? FooParentId { get; set; }
    public Foo FooParent { get; set; }

    public int? BarParentId { get; set; }
    public Bar BarParent { get; set; }

    public Foo(Foo parent)
    {
        FooParent = parent;
        FooParentId = parent.Id;

        Parent = FooParent; // Now changes to Parent are reflected on FooParent
        ParentId = FooParentId; // Changes to ParentId are not reflected because it is a value type.
    }
    public Foo(Bar parent)
    {
        // Same implementation as ctor(Foo parent);
    }
}

我正在尝试做的是Parent引用FooParentBarParent(我相信这很简单),然后ParentId引用FooParentIdBarParentId制作ParentId引用类型的最明智的方法是什么?

这里的答案提到整数的装箱/拆箱有很多与其相关的问题。
这真的是一个不好的解决方案吗?

编辑:
我应该已经提到过,Foo并且Bar是实体框架表。Foo是一个对象,可以是一个表或其他的孩子,以及用于实体框架代码优先正确地生成该表中,既FooParentBarParent必须被定义。此外,ParentId可能不会Parent在其吸气剂中引用实体框架也应为此负责。调用时,实体框架会重新插入现有对象context.Set<Foo>().Add(newItem);所有不为null的Parents都会重新插入。

瑞安·埃默尔(Ryan Emerle)

如果您的双手受到EF的束缚,则可以使用委托ParentId基于构造函数中传递的类型来传播的更改我不知道EF是否会对此抱怨。

例如,使用Action<T>委托,我们可以将更改转发ParentId到相应的[Foo|Bar]ParentId

public class Base
{
    public int Id { get; set; }
}

public class Bar : Base {  }

public class Foo : Base
{
    private int? _parentId;

    public int? ParentId { 
        get{ return _parentId; } 
        set{ 
            _parentId = value;
            if( OnParentChangeAction != null ) {
                OnParentChangeAction( _parentId ); 
            }
        } 
    }

    public Base Parent { get; set; }

    public int? FooParentId { get; set; }
    public Foo FooParent { get; set; }

    public int? BarParentId { get; set; }
    public Bar BarParent { get; set; }

    private Action<int?> OnParentChangeAction{ get; set; }

    public Foo(Foo parent)
    {
        FooParent = parent;
        FooParentId = parent.Id;

        Parent = FooParent;
        ParentId = FooParentId;
        OnParentChangeAction = newParentId => FooParentId = newParentId;
    }
    public Foo(Bar parent)
    {
        BarParent = parent;
        BarParentId = parent.Id;

        Parent = BarParent; 
        ParentId = BarParentId; 
        OnParentChangeAction = newParentId => BarParentId = newParentId;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中将值类型更改为引用类型的最佳方法是什么?

来自分类Dev

在C#中将int类型更改为char类型

来自分类Dev

在Laravel迁移中更改列类型的最佳方法是什么?

来自分类Dev

为什么在C#中将字节值分配给动态变量会导致动态更改为字节数据类型?

来自分类Dev

在SQL中将Year从YYYY更改为FYYY的最佳方法是什么?

来自分类Dev

在C ++中实现分数类型的最佳方法是什么?

来自分类Dev

在pyspark中将值随机更改为空值的最有效方法是什么?

来自分类Dev

在“ C#”中将“值类型”装箱为“引用类型”时需要多少内存?

来自分类Dev

C#中的值类型BigInteger的限制是什么?

来自分类Dev

在Chapel中将数组类型约束为具有连续数据的本地数组的最佳方法是什么?

来自分类Dev

如何在WPF C#中将类型从ObservableCollection <object>更改为ObservableCollection <class>

来自分类Dev

在Postgres的c#中获取表字段的数据库数据类型的最佳最快方法是什么?

来自分类Dev

C#方法签名-限制类型-正确的术语是什么?

来自分类Dev

检查所有 JSON 属性值类型的最佳方法是什么?

来自分类Dev

存储值类型变量C#的引用

来自分类Dev

引用类型的定义是什么?

来自分类Dev

const引用的类型是什么?

来自分类Dev

C#集合是值类型还是引用类型?

来自分类Dev

在python中将实例类型更改为继承

来自分类Dev

在C#中将动态行数插入SQL Server的最佳方法是什么

来自分类Dev

左值引用类型是什么意思

来自分类Dev

关于右值引用的困惑:它的类型是什么?

来自分类Dev

左值引用类型是什么意思

来自分类Dev

从捕获中排除异常类型的最佳方法是什么?

来自分类Dev

检查Scala变量类型的最佳方法是什么?

来自分类Dev

模板方法中可调用对象的最佳类型是什么?

来自分类Dev

从捕获中排除异常类型的最佳方法是什么?

来自分类Dev

排序这些类型的字符串的最佳方法是什么?

来自分类Dev

在 tsconfig 中显式包含类型的最佳方法是什么?

Related 相关文章

  1. 1

    在C#中将值类型更改为引用类型的最佳方法是什么?

  2. 2

    在C#中将int类型更改为char类型

  3. 3

    在Laravel迁移中更改列类型的最佳方法是什么?

  4. 4

    为什么在C#中将字节值分配给动态变量会导致动态更改为字节数据类型?

  5. 5

    在SQL中将Year从YYYY更改为FYYY的最佳方法是什么?

  6. 6

    在C ++中实现分数类型的最佳方法是什么?

  7. 7

    在pyspark中将值随机更改为空值的最有效方法是什么?

  8. 8

    在“ C#”中将“值类型”装箱为“引用类型”时需要多少内存?

  9. 9

    C#中的值类型BigInteger的限制是什么?

  10. 10

    在Chapel中将数组类型约束为具有连续数据的本地数组的最佳方法是什么?

  11. 11

    如何在WPF C#中将类型从ObservableCollection <object>更改为ObservableCollection <class>

  12. 12

    在Postgres的c#中获取表字段的数据库数据类型的最佳最快方法是什么?

  13. 13

    C#方法签名-限制类型-正确的术语是什么?

  14. 14

    检查所有 JSON 属性值类型的最佳方法是什么?

  15. 15

    存储值类型变量C#的引用

  16. 16

    引用类型的定义是什么?

  17. 17

    const引用的类型是什么?

  18. 18

    C#集合是值类型还是引用类型?

  19. 19

    在python中将实例类型更改为继承

  20. 20

    在C#中将动态行数插入SQL Server的最佳方法是什么

  21. 21

    左值引用类型是什么意思

  22. 22

    关于右值引用的困惑:它的类型是什么?

  23. 23

    左值引用类型是什么意思

  24. 24

    从捕获中排除异常类型的最佳方法是什么?

  25. 25

    检查Scala变量类型的最佳方法是什么?

  26. 26

    模板方法中可调用对象的最佳类型是什么?

  27. 27

    从捕获中排除异常类型的最佳方法是什么?

  28. 28

    排序这些类型的字符串的最佳方法是什么?

  29. 29

    在 tsconfig 中显式包含类型的最佳方法是什么?

热门标签

归档