简体   繁体   English

DataObjects.NET 4.0保存某些数据

[英]DataObjects.NET 4.0 Save certain data

I am creating a WinForms application in C# using DataObjects.NET. 我正在使用DataObjects.NET在C#中创建WinForms应用程序。 I'm a little bit stuck on a certain point. 我在某一点上有些卡住。 I have some data in a database. 我在数据库中有一些数据。 It are objects as below: 其对象如下:

[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)
    {
       //...
    }
}

Now I need the functionality to import objects out of a CSV file and compare them with the data available in the database. 现在,我需要将对象从CSV文件导入并将其与数据库中可用数据进行比较的功能。 As my constructor takes 1 argument of Xtensive.Orm.Session , I import the objects as followed and return a list with all imported objects. 当我的构造函数接受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;

After I got my imported list, I do some checks on the data and I analyze the data to fill 2 new lists with changed objects and new objects. 导入列表后,我将对数据进行一些检查,然后分析数据以用更改的对象和新的对象填充2个新列表。 Now my question is, if a User clicks on a save button, the new objects and changed objects have to be updated or added in the database. 现在我的问题是,如果用户单击保存按钮,则必须更新或添加新对象和更改的对象。 I tried to use Session.SaveChanges(); 我试图使用Session.SaveChanges(); , but as all my objects inherit from Entity , the session wants to save all the objects resulting in SQL-errors on duplicate rows. ,但是由于我的所有对象都继承自Entity ,因此会话希望保存所有对象,从而导致重复行上出现SQL错误。 I am not sure how to fix this problem. 我不确定如何解决此问题。

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

I was looking on the world wide web to find a solution, but couldn't find a well explained one. 我在万维网上寻找解决方案,但找不到一个解释清楚的解决方案。

I am new to DataObjects and I know it's an old ORM framework but I have to use it. 我是DataObjects的新手,我知道这是一个旧的ORM框架,但是我必须使用它。 I hope some of you guys could help me out with this annoying problem as their support is pretty dead. 我希望你们中的一些人可以帮助我解决这个烦人的问题,因为他们的支持已经死了。

As I understand, DataObjects.Net doesn't implement Unit of Work. 据我了解,DataObjects.Net并未实现工作单元。 Instead, it holds connection open and pushes updates as soon as you make changes (create/update/delete instances). 而是保持连接打开并在您进行更改(创建/更新/删除实例)后立即推送更新。

So, with 因此,

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

DataObjects.Net stores a record to DB corresponding to this object. DataObjects.Net将记录存储到与此对象相对应的DB。

And with

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

you are forcing to do it again. 您强制做一遍。 Thus you've got this error. 因此,您有此错误。

So correct solution suggests 1) detect if some objects already have been stored, 2) create objects (which are really need to be created) like you do, 3) don't call anything like SaveChanges, etc 所以,正确的解决方案建议1)检测是否已经被存储的一些对象,2)创建对象(这是真正需要被创建)像你一样,3)不调用任何类似的SaveChanges等

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM