这是我第一天和Simple.Data在一起。我正在从纯ADO .NET迁移我的项目。
我有一个有列的Order表:
Id
CreationDate
CustomerId -> FK to Customer table在我的项目中还有一个订单类:
int Id
DateTime CreationDate
Customer Customer要向数据库插入新的订单,我要做的是:
var newOrder=...
_db.Orders.Insert(new {
CreationDate=newOrder.CreationDate,
CustomerId = newOrder.Customer.Id
}
);有可能做得更简单吗?对于我来说,更简单意味着无需创建新的匿名对象并复制每个属性值。我知道Simple.Data提供了插入的隐式转换,但是当我尝试这样做时:
var newOrder=...
_db.Orders.Insert(newOrder);我从我的CustomerId中得到了一个异常"CustomerId不能是NULL“。
发布于 2013-10-01 06:12:17
我认为目前这是不可能的,但是Mark正在为v2考虑“允许用一个调用保存对象图,如果这是可能的话”(参见他的博客文章:http://blog.markrendle.net/2013/09/18/simple-data-2-0/,特别是“更好的WithStuff”段落)。
但是,您可以避免复制每个属性值,方法是将"newOrder“对象转换为动态的,并简单地向其添加"CustomerId”值,如下所示:
var d = newOrder.ToDynamic();
d.CustomerId = newOrder.Customer.Id;
_db.Orders.Insert(d);其中"ToDynamic()“是一个简单的扩展方法:
public static dynamic ToDynamic(this object @this)
{
IDictionary<string, object> expando = new ExpandoObject();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(@this.GetType()))
{
expando.Add(property.Name, property.GetValue(@this));
}
return expando as ExpandoObject;
}在插入过程中,Simple.Data将忽略原始的"Customer“属性,因为基础表没有相应的列。
发布于 2013-09-23 14:58:32
客户ID不能为空。当CustomerId为null时,需要不将数据插入数据库的逻辑。
if (newOrder.Customer != null && newOrder.Customer.Id != null)
{
_db.Orders.Insert(new
{
CreationDate=newOrder.CreationDate,
CustomerId = newOrder.Customer.Id
});
}https://stackoverflow.com/questions/18962460
复制相似问题