将对象嵌入另一个对象中

时间:2012-10-11 18:10:53

标签: c# asp.net-mvc-3

我正在尝试复制一个复杂的对象。原始对象就像

         Note note = db.Notes.FirstorDefault(n............);

当我将鼠标悬停在Note对象上时,会看到此stuctor

注意| Data.Model.Note

如果深入了解,我会看到

Base Data.Model.AnalyNote

如果再次向下钻取,我会看到

Base Data.Model CPObject

如果查看变量“note”,我会在第一层看到这个

         +base Data.Model.Note
         +AnalyNotes
          FisYear
          Quarter
          QReport

如果我看第二层

         +base Data.Model.AnalyNote
         +Attachments
         +Classify
          Headline
          IsDraft

如果我去第三层

         +Data.Model.CPObject
          EntryId
         +EntryDate
          Id

其中每一个(Note,AnalyNote,CPObject)都是单独的模型。我可以创建单独的模型但不了解如何嵌入它们来复制原始Note模型。我创造了三个 使用

         var NNotes = new Notes()
         {
            data.....
         }

         var AAnote = new AnalyNote()
         {
            data......
         }

         var CPONote = new CPObject()
         {
            data.....
         }

这是我所得到的。

2 个答案:

答案 0 :(得分:3)

这里有两件事:

  1. 从您的向下钻取,似乎Data.Model.Note继承自Data.Model.AnalyNote,它继承自Data.Model.CPObject(我假设您从CPObject的命名空间中留出一段时间)。所以你不需要创建所有三个,只需要创建Data.Model.Note。 MVC应该为您完成建模工作。
  2. 如果您从实施iCloneable的内容中获取您的注释,您的工作可能就像

    一样简单

    Note note = db.Notes.FirstorDefault(n............); Note duplicate = note.Clone();


  3. 从下面的评论中,您可能会尝试对Note模型进行子类化。听起来你的模型背后还没有任何数据,所以代码优先的方法可能会很好。你可以制作一个像这样的新模型

    class Data.Model.NewerNote : Data.Model.Note
    {
    // the new fields ("variables") would go here.
         public int NoteFoo {get; set;}
         public DateTime NoteFrob {get; set;}
    // and so on.
    } 
    

    您可以在此处找到类似Programming Entity Framework: Code FirstProgramming ASP.NET MVC 4的参考书。

答案 1 :(得分:0)

虽然我认为Reacher Gilts的回答正确地分析了你的情况,如果你想“将一个对象嵌入另一个对象中”,这被称为组合,它就像宣布一个新类的成员是其他三个类的实例一样简单。

public class OuterNote
{
    NNote nNote;
    AAnote aaNote;
    CPONote cpoNote;

   public OuterNote()
   {
       nNote = new NNote();
       aaNote = new AANote();
       cpoNote = new CPONote();
   }

   // add other constructors or initializers to this class and the others needed
}