Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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# 带有默认构造函数的context.Entities.Create()_C#_Entity Framework_Dbcontext - Fatal编程技术网

C# 带有默认构造函数的context.Entities.Create()

C# 带有默认构造函数的context.Entities.Create(),c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,使用Entity Framework DbContext时,要创建新实体并将其包装到代理类中,需要执行以下操作: var product = context.Products.Create(); 为实体创建代理,但不允许构造函数变量初始化,如: var product = new Product { name = "Product Name" }; 问题1: 有没有办法为已经实例化的对象创建代理?比如: context.Products.CreateProxyFrom(product)

使用Entity Framework DbContext时,要创建新实体并将其包装到代理类中,需要执行以下操作:

var product = context.Products.Create();
为实体创建代理,但不允许构造函数变量初始化,如:

var product = new Product { name = "Product Name" };

问题1: 有没有办法为已经实例化的对象创建代理?比如:

context.Products.CreateProxyFrom(product) 

问题2: 是否有任何方法可以创建类初始化,如

context.Products.Create() { name = "Product Name" };

我知道这两个选项都不存在,我想知道是否有一些捷径或解决办法


问题3:

拥有
工资支票:支付
(继承)
我只能做
context.Payments.Create()

但是我需要一个
工资支票
实例。如何创建
工资支票

我真的不认为在创建代理后只设置属性值有什么大不了的,但是如果您必须在同一行上设置属性值,并且不怕稍微污染您的IntelliSense,那么您总是可以通过扩展方法获得一些功能:

public static T Apply<T>(this T input, Action<T> action)
{
    action(input);

    return input;
}

这不是因为一个班轮。这是因为使用默认构造函数更新了大量的旧代码。然后你几乎陷入了重构——除非你准备使用自己的
CreateProxyFrom
扩展方法,该方法将接受一个具体的对象实例,使用反射或自动映射类型工具创建代理并复制属性值,同时注意不要触摸导航属性。这是危险和浪费的,但是如果你真的负担不起去重构的话是可行的。。。给这件事增加了一个新问题。不。2.不。3.使用
context.Payments.Create()
您可能会发现这很有趣。
Product product = context.Products.Create()
    .Apply(p => p.name = "Product Name")
    .Apply(p => p.category = 42);