不能'似乎想出这个.
public class DestinationClass
{
public int InnerPropertyId { get; set; }
public string StrignValue { get; set; }
}
public class SourceClass
{
public InnerValue Inner { get; set; }
}
public class InnerValue
{
public int InnerPropertyId { get; set; }
public string StrignValue {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我需要从SourceClass.InnerValue直接映射到DestinationClass.我怎么做?
提前致谢.
我在这里有.net 4.0 c#,IBatisNet和CSLA框架的企业项目.
ORA-01084: invalid argument in OCI call当在包中调用insert proc时,其中一个项目作业失败了.返回的错误消息最多是神秘的,存储过程有83个输入参数,不受名称约束(感谢IBatis).
什么是好奇:我有一套记录可以说Order和OrderItems.Order有28个订单商品.作业必须通过创建另一个Order并复制所有OrderItems记录来更新订单.新订单商品按ParentOrderItemId字段引用旧订单商品,这也是Orders将要续订的选择条件.
当我运行它第一次处理吹上OrderItemId: 12345有ORA-01084错误.但是当我下次重新运行时,它会成功处理OrderItemId: 12345.然后爆炸了OrderItemId: 12444.然后我重新运行并OrderItemId: 12444正确处理等等.
我已经传递了DbParameters的日志,它们在两种情况下都是相同的.
我有oci客户端跟踪,但它也没用.
我已经设置了数据库层的登录,到目前为止它没有给我什么.
任何想法如何追踪这些类型的错误?
我们有以下内容:使用UserId和User表订购.
假设我们要将所有User对象缓存为断开连接的实体,然后在ASP.NET或Web服务(如环境)中使用它们.
因为environmnet正在使用UnitOfWork和IOC框架,所以我们希望避免任何上下文操作.像下面的单元测试一样:
经过两天激烈的谷歌搜索,我找不到任何解决方案.
问题是:
1.用户对象
如果我们附加用户对象(使用userId = 1),则使用默认行为,EF认为它是新的用户对象,并且正在尝试将新用户对象持久保存到db中.这是因为db已经有userId == 1.
可能的解决方案是覆盖DbContext.SaveChanges,尝试确定User是否"已分离"并强制将其附加到上下文.我无法弄清楚如何做到这一点,因为扩展方法EFExtensionMethods.IsAttached或EFExtensionMethods.AttachItem时从调用SaveChanges称为认为T是一个对象.
2. USER_ID
除非您想要在持久化和重新加载整个实体之前访问Order.User对象,否则这样做.
最重要的是,我们需要拆分API,以便仅使用对象的id(即Order.UserId)而不是实际对象(Order.User).我们重新加载对象后,我们可以使用它们.但我看不出通过API实际执行它的方法.
3.两个用户对象和USER_ID
在这种情况下,即使用户被标记为使用UserId作为外键,EF仍在尝试将User对象保存到上下文中,以解决1中描述的问题.
看起来我错过了一些(或很多)基础知识,问题是:
任何帮助是极大的赞赏.
[TestMethod]
public void Creating_Order_With_Both_User_And_Id()
{
int userCount = CountAll<User>();
User user;
using (var db = GetContext()) { user = db.Users.AsNoTracking().First(); }
using (var db = GetContext())
{
var o = CreateOrder();
o.OrderUser = user; // attach user entity
o.UserId = user.UserID; // attach by id
db.Orders.Add(o);
db.SaveChanges();
}
int newUserCount = CountAll<User>(); …Run Code Online (Sandbox Code Playgroud)