Итерация по DataMembers в службе WCF - PullRequest
1 голос
/ 09 февраля 2012

У нас есть существующая база данных и скрипт, который будет принимать электронную почту, находить нужные нам части данных (например, имя, адрес, адрес электронной почты и т. Д.), А затем вставлять данные в базу данных в виде пар поле / значение столбцы «FieldLabel» и «FieldValue»).

Сейчас я реализую API (служба WCF), чтобы заменить этот анализ электронной почты с использованием C # на Entity Framework. Я создаю DataContract, «Details», который содержит DataMemebers «Name», «Address», «Email» и т. Д., Который передается в API. Затем у меня есть метод InsertData (), который я хочу использовать, чтобы взять каждый элемент данных и использовать его имя в качестве FieldLabel и его значение в качестве FieldValue.

Например, с Name = "Brian" и ZipCode = "11111" я хочу создать пары метка / значение для Name / Brian & ZipCode / 11111.

Вот что я ищу в псевдокоде:

DetailsTable _detail = new DetailsTable();       // EF table object

foreach (datamemeber in Details)
{
   _detail.FieldLabel = datamemeber.toString();
   _detail.FieldValue = datamember.Value();
}

ОБНОВЛЕНИЕ: добавлен код для моих данных DataContract

[DataContract]
public class Details
{

    public LeadDetail()
    {
        FirstName = "";
        LastName = "";
        StreetAddress = "";
        City = "";
        State = "";
        ZipCode = "";
    }

    public LeadDetail(string firstName, string lastName, string streetAddress, 
        string city, string state, string zipCode)
    {
        FirstName = firstName;
        LastName = lastName;
        StreetAddress = streetAddress;
        City = city;
        State = state;
        ZipCode = zipCode;
    }

    [DataMember]
    public string FirstName;
    [DataMember]
    public string LastName;
    [DataMember]
    public string StreetAddress;
    [DataMember]
    public string City;
    [DataMember]
    public string State;
    [DataMember]
    public string ZipCode;
}

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Есть несколько проблем, которые необходимо решить, чтобы ваш псевдокод работал.Сначала вам нужно перебрать поля экземпляра объекта Details для получения пар ключ / значение, а затем создать объект из DetailsEntity для выполнения вставки.Если я правильно понимаю вашу проблему, правильное разделение имен классов Details (username, zip, ...) и DetailsKeyValue (FieldLabel, FieldValue) улучшит понимание вашего кода.

Вот код, который будет повторятьсянад полями объекта Details и вставьте эквивалентную сущность EF, DetailsKeyValue.

using (var context = new DetailsKeyValueContext()) {
    foreach (FieldInfo field in details.GetType().GetFields()) {
        var detailsKeyValue = new DetailsKeyValue();
        detailsKeyValue.FieldLabel = field.Name;
        detailsKeyValue.FieldValue = field.GetValue(details) as string;
        context.DetailsKeyValue.Add(detailsKeyValue);
    }
    context.SaveChanges();
}

А вот код первой сущности и классы контекста.

public class Details
{
    public string Name;
    public string Zip;
    public string Email;
}

public class DetailsKeyValue
{
    public string FieldLabel { get; set; }
    public string FieldValue { get; set; }
}

public class DetailsKeyValueContext: DbContext
{
    public DbSet<DetailsKeyValue> DetailsKeyValue { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<DetailsKeyValue>()
            .HasKey(x => x.FieldLabel);
    }
}
0 голосов
/ 09 февраля 2012

ваш «псевдокод» выглядит практически идентичным реальному коду для достижения этой цели.Все, что вам нужно, это DbContext, обернутый вокруг него, строка подключения, имя которой совпадает с вашим контекстом (например, DetailsContext), и вы готовы к работе.

Отредактировано:

Details details = Populate();  // Populated from parameter passed in

using (var context = new DetailsContext())
{
   DetailsEntity _detail = new DetailsEntity();       // EF table object

   foreach (datamemeber in details)
   {
      _detail.FieldLabel = datamemeber.Type;
      _detail.FieldValue = datamember.Value;
   }

   context.SaveChanges();
}

это хорошая справка для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...