Вставить несколько записей вопроса (linq EF) - PullRequest
2 голосов
/ 15 октября 2011

Мне нужно вставить несколько записей в разные таблицы, проблема в том, что в некоторых таблицах есть 2 разных внешних ключа, и EF выдает мне исключение.Часть моей схемы показана ниже.enter image description here

И это мой код

  Credito cred = new Credito()
            {
                Producto = credito.producto,
                Tipo = credito.tipo,
                Status = credito.status,
                Cantidad = credito.monto_prestamo,
                TasaInteres = credito.tasa_interes,
                Plazo = credito.plazo,
                Periodo = credito.periodo,
                FechaInicio = credito.fecha_inicio
            };
            Cuentas cuenta = new Cuentas()
            {
                IDCredito = credito.idCredito,
                IDBanco = credito.idBanco
            };
            Grupo gpo = new Grupo()
            {
                Nombre = credito.grupo,
                IDRepre = credito.idRepGpo
            };

            context.creditos.AddObject(cred);
            context.bancos_credito.AddObject(cuenta);
            for (int i = 0; i < credito.total_plazo; i++)
                context.amortizaciones.AddObject(AgregaAmortizacion(ref fechaPago, i, credito));
            context.grupos.AddObject(gpo);
            for (int i = 0; i < renglones; i++)
            {
                context.acreditados.AddObject(AgregaAcreditado(i, credito));
                context.agrupaciones.AddObject(AgregaAgrupacion(i, credito));
            }
            context.SaveChanges();

Все, кроме «context.agrupaciones.AddObject (AgregaAgrupacion (i, credito))», в порядке.Проблема здесь в том, что у «agrupaciones» есть 2 FK (id_acreditado, id_grupo), даже когда я добавляю объекты «grupos» и «acreditados» в контекст.Вы знаете, что происходит?Разве структура сущностей не способна вставлять FK из двух таблиц без указания значений?Надеюсь, кто-нибудь может мне помочь, спасибо

1 Ответ

0 голосов
/ 15 октября 2011

Похоже, проблема в том, что вы устанавливаете только идентификатор FK (IDRepre, IDBanco). Обычно при установке ссылок в EF вы используете весь объект (cuenta.Credito = cred;).

Credito cred = new Credito() 
        { 
            Producto = credito.producto, 
            Tipo = credito.tipo, 
            Status = credito.status, 
            Cantidad = credito.monto_prestamo, 
            TasaInteres = credito.tasa_interes, 
            Plazo = credito.plazo, 
            Periodo = credito.periodo, 
            FechaInicio = credito.fecha_inicio 
        };
Cuentas cuenta = new Cuentas()   
        {   
            IDCredito = credito.idCredito,   
            IDBanco = credito.idBanco   
        }; 
cred.Cuentas.Add(cuenta);
... (more mapping code here)
context.credito.AddObject(cred); 
context.SaveChanges();

Вам нужно только сделать «AddObject» для родительского объекта, если дочерние элементы установлены правильно.

...