C# 带有默认构造函数的context.Entities.Create()
使用Entity Framework DbContext时,要创建新实体并将其包装到代理类中,需要执行以下操作: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)
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);