Ссылка на существующую запись или добавление новой записи для отношения многие ко многим в EF - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть отношения многие ко многим следующим образом:

Table1
ID (int) | Name (string)

Table2
ID (int) | Data (string)

Table1_2
Table1ID (int) | Table2ID (int)

Я хотел бы сделать следующее в Entity Framework:

Учитывая List<Table1>, посмотрите, совпадают ли какие-либо записи в Таблице 1; если это так, обратитесь к ним; если нет, добавьте их и сделайте ссылку на них. Например, что-то вроде:

public void InsertOrReferenceExisting(string data, List<Table1> table1References)
{
    var myEntities = new MyEntities();
    var table1Entities = new EntityCollection<Table1>();
    foreach(var row in table1References)
    {
            var existing = myEntities.Table1.Where(x => x.Name == row.Name);
            if (existing.Count() > 0)
            {
                // reference existing row in Table1
            }
            else
            {
                // add new row to Table1
            }
    }
    myEntities.Table2.AddObject(new Table2
        {
            Data = data,
            Table1s = table1Entities
        });
    myEntities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}

Я на правильном пути?

1 Ответ

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

Попробуйте:

public void InsertOrReferenceExisting(string data, List<Table1> table1References)
{
    using (var myEntities = new MyEntities())
    {
        var tbl2 = myEntities.Table2.CreateObject();
        tbl2.Data = data;
        myEntities.Table2.AddObject(tbl2);
        foreach (var row in table1References)
        {
            var tbl1 = myEntities.Table1.Where(x => x.Name == row.Name).FirstOrDefault();
            if (tbl1 == null)
            {
                tbl1 = myEntities.Table1.CreateObject();
                tbl1.Name = row.Name;
            }

            tbl2.Table1.Add(tbl1);
        }

        myEntities.SaveChanges();
    }
}

Обратите внимание, что это решение не допускает наличие нескольких записей в Таблице 1, имеющих одинаковое значение в столбце Имя.Вы, вероятно, должны применять это с уникальным ограничением на уровне базы данных.

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