首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Simple.Data插入复杂对象

Simple.Data插入复杂对象
EN

Stack Overflow用户
提问于 2013-09-23 14:54:08
回答 2查看 1.1K关注 0票数 1

这是我第一天和Simple.Data在一起。我正在从纯ADO .NET迁移我的项目。

我有一个有列的Order表:

代码语言:javascript
复制
Id
CreationDate
CustomerId  -> FK to Customer table

在我的项目中还有一个订单类:

代码语言:javascript
复制
int Id
DateTime CreationDate    
Customer Customer

要向数据库插入新的订单,我要做的是:

代码语言:javascript
复制
var newOrder=...
_db.Orders.Insert(new {
                       CreationDate=newOrder.CreationDate,
                       CustomerId = newOrder.Customer.Id
                      }
                 );

有可能做得更简单吗?对于我来说,更简单意味着无需创建新的匿名对象并复制每个属性值。我知道Simple.Data提供了插入的隐式转换,但是当我尝试这样做时:

代码语言:javascript
复制
var newOrder=...
_db.Orders.Insert(newOrder);

我从我的CustomerId中得到了一个异常"CustomerId不能是NULL“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-01 06:12:17

我认为目前这是不可能的,但是Mark正在为v2考虑“允许用一个调用保存对象图,如果这是可能的话”(参见他的博客文章:http://blog.markrendle.net/2013/09/18/simple-data-2-0/,特别是“更好的WithStuff”段落)。

但是,您可以避免复制每个属性值,方法是将"newOrder“对象转换为动态的,并简单地向其添加"CustomerId”值,如下所示:

代码语言:javascript
复制
var d = newOrder.ToDynamic();
d.CustomerId = newOrder.Customer.Id;
_db.Orders.Insert(d);

其中"ToDynamic()“是一个简单的扩展方法:

代码语言:javascript
复制
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“属性,因为基础表没有相应的列。

票数 1
EN

Stack Overflow用户

发布于 2013-09-23 14:58:32

客户ID不能为空。当CustomerId为null时,需要不将数据插入数据库的逻辑。

代码语言:javascript
复制
if (newOrder.Customer != null && newOrder.Customer.Id != null)
{
    _db.Orders.Insert(new 
    {
         CreationDate=newOrder.CreationDate,
         CustomerId = newOrder.Customer.Id
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18962460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档