Shenjk

天地生人,有一人应有一人之业;人生在世,生一日当尽一日之勤

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

问题简单描述:discriminator 对应的列如何映射,如果不做映射,discriminator对应的列的内容读取不到,如果做了,插入数据不正确。详细如下:

 

先看Order 和 Invoice的配置文件:

 

Order是一个聚合根,保存Invoice(发票)信息,理论上都应该通过Order进行操作,那么我们再看Order的仓储:

 

代码
  public void Store(Order order)
        {
            ISession session 
= Session;           
            
try
            {
                session.Clear();
                session.Save(order);
                session.Flush();
              
            }
            
catch (Exception ex)
            {
                Console.Write(ex.Message);               
            }
            
finally
            {               
            }
        }

 

我进行Order的插入操作,同时插入Invoice

 

代码
            Guid id = Guid.NewGuid();
            Order order 
= new Order()    {
                ID 
= id,
                Code 
= DateTime.Now.ToString()  
            };
            order.Invoice 
= new InvoiceEnterprise() { ID = order.ID, InvoiceType = InvoiceType.NormalEnterprise, EnterpriseName = "test", Content = "明细" };

            IOrderRepository orderRepository 
= RepositoryFactory.Get<IOrderRepository, Order>();

            orderRepository.Store(order);

 

测试结果正常,能正常插入数据,

我们再看看读取数据:

 

代码
 IOrderRepository orderRepository = RepositoryFactory.Get<IOrderRepository, Order>();

            Order order 
= orderRepository.FindById(new Guid("718523d4-f794-4cad-8c5b-d2e76c9eedee"));
            
            Console.WriteLine(
"InvoiceType="+((int)order.Invoice.InvoiceType).ToString());

 

测试结果显示:InvoiceType=0 而数据库里,很明显是1,无论数据库里是什么,都未能映射到 InvoiceType

 

那么我就对 InvoiceType 进行映射吧:

再做一次测试,发现插入数据时: 

此 SqlParameterCollection 的 Count=3 的索引 3 无效。

 

显然是 InvoiceType做了多余的映射,

 

查询数据结果:

InvoiceType=1

 

查询结果是正确的。

 

经过上面的测试,我就迷糊了,不知道怎么配置,才能让插入和查询都能正常呢?

posted on 2010-08-16 12:03  shenjk  阅读(603)  评论(1编辑  收藏  举报