Как я могу получить идентификатор вставленной сущности в Entity Framework? [закрыто]

Чтобы решить эту проблему, мне пришлось изменить сгенерированные классы:

  1. Перенесите XmlTextAttribute из свойства Text в свойство Items и добавьте параметр Type = typeof(string)
  2. Удалите свойство Text
  3. Удалите поле textField

. В результате сгенерированный код (измененный) выглядит следующим образом:

/// 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(TypeName="StrucDoc.Paragraph", Namespace="urn:hl7-org:v3")]
public partial class StrucDocParagraph {

    private StrucDocCaption captionField;

    private object[] itemsField;

    private string idField;

    // ...fields for other attributes...

    /// 
    public StrucDocCaption caption {
        get {
            return this.captionField;
        }
        set {
            this.captionField = value;
        }
    }

    /// 
    [System.Xml.Serialization.XmlElementAttribute("br", typeof(StrucDocBr))]
    [System.Xml.Serialization.XmlElementAttribute("sub", typeof(StrucDocSub))]
    [System.Xml.Serialization.XmlElementAttribute("sup", typeof(StrucDocSup))]
    // ...other possible nodes...
    [System.Xml.Serialization.XmlTextAttribute(typeof(string))]
    public object[] Items {
        get {
            return this.itemsField;
        }
        set {
            this.itemsField = value;
        }
    }

    /// 
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="ID")]
    public string ID {
        get {
            return this.idField;
        }
        set {
            this.idField = value;
        }
    }

    // ...properties for other attributes...
}

Теперь, если я десериализую XML-элемент, где узел абзаца выглядит следующим образом:

first line

third line

В результате массив элементов считывается следующим образом:

itemsField = new object[]
{
    "first line",
    new StrucDocBr(),
    new StrucDocBr(),
    "third line",
};

Это именно то, что мне нужно, порядок элементов и их содержимое верны. И если я снова сериализую его, результат снова верен:

first line

third line

То, что указывало мне в правильном направлении, было ответом Гийома, я также подумал, что это должно быть возможно так. И затем это было в документации MSDN к XmlTextAttribute :

Вы можете применить XmlTextAttribute к полю или свойству, которое возвращает массив строк. Вы также можете применить атрибут к массиву типа Object, но вы должны установить свойство Type в строку. В этом случае любые строки, вставленные в массив, сериализуются как XML-текст.

Таким образом, сериализация и десериализация работают исправно, но я не знаю, есть ли какие-либо другие побочные эффекты. Возможно, невозможно создать схему из этих классов с помощью xsd.exe, но мне это все равно не нужно.

542
задан gunr2171 7 May 2014 в 13:00
поделиться