DataObjects.NET 4.0保存某些数据

时间:2014-05-05 10:24:36

标签: c# orm dataobjects.net

我正在使用DataObjects.NET在C#中创建一个WinForms应用程序。我有点卡在某一点上。我在数据库中有一些数据。它是如下对象:

[HierarchyRoot]
[Index("Id", Unique = true)]
public class Object : Entity
{
    [Field]
    public string Id { get; set; }
    [Field(Length = 100)]
    public string Value { get; set; }

    public Object(Session session)
        : base(session)
    {
    }

    public Object(Session session,string Id,string Value)
        : base(session)
    {
       //...
    }
}

现在我需要从CSV文件中导出对象的功能,并将它们与数据库中可用的数据进行比较。当我的构造函数接受Xtensive.Orm.Session的1个参数时,我按照后面的方式导入对象并返回包含所有导入对象的列表。

 while ((sLine = sr.ReadLine()) != null)
 {
        //Object o = new Object(Xtensive.Orm.Session,string id, string value)
        Object o = new Object(session, sLine.Split(';')[0], sLine.Split(';')[1]);

        objectlist.Add(o);
 }
 return objectlist;

获取导入列表后,我会对数据进行一些检查,然后分析数据以填充包含已更改对象和新对象的2个新列表。现在我的问题是,如果用户点击了保存按钮,则必须在数据库中更新或添加新对象和更改的对象。我尝试使用Session.SaveChanges();,但由于我的所有对象都继承自Entity,因此会话要保存所有对象,从而导致重复行出现SQL错误。我不知道如何解决这个问题。

 private bool SaveChanges()
 {
      foreach(Object o in newObjects)
           //Add new objects to db
      foreach(Object o in changedObjects)
           //Update object
 }

我正在万维网上寻找解决方案,但无法找到解释得很好的解决方案。

我是DataObjects的新手,我知道它是一个旧的ORM框架,但我必须使用它。我希望你们中的一些人可以帮助我解决这个恼人的问题,因为他们的支持已经死了。

1 个答案:

答案 0 :(得分:0)

据我所知,DataObjects.Net并没有实现工作单元。相反,它会保持连接打开,并在您进行更改后立即推送更新(创建/更新/删除实例)。

所以,用

Object o = new Object(session, sLine.Split(';')[0], sLine.Split(';')[1]);

DataObjects.Net将记录存储到与此对象对应的DB。

并且

private bool SaveChanges()
 {
      foreach(Object o in newObjects)
           //Add new objects to db
      foreach(Object o in changedObjects)
           //Update object
 }

你强迫再做一次。因此,你得到了这个错误。

所以正确的解决方案建议1)检测是否已存储某些对象,2)创建对象(真正需要创建),就像你做的那样,3)不要调用SaveChanges之类的东西