在父表中插入新记录,而不是仅插入子项

时间:2017-08-27 12:19:41

标签: sql-server asp.net-mvc entity-framework-6

我有一个父母实体“persona”(人)和两个子实体“voluntario”(志愿者)和“colaborador”(colaborator)。

我尝试使用此代码将colaborator添加到现有的“persona”(因为是现有的“voluntario”),但是实体框架在父表的表上创建了一条新记录,而在子表的表中创建了一条新的父记录,而不是现有的之一:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Current array:
<span id="displayArray"></span>

<hr> Add to array:
<div class="newColor">blue</div>
<div class="newColor">red</div>
<div class="newColor">green</div>
<div class="newColor">orange</div>
<div class="newColor">purple</div>
<div class="newColor">yellow</div>
<div class="newColor">brown</div>
<div class="newColor">pink</div>

这是“Colaboradores”表中的结果:

This is the result in table "Colaboradores":

这是表“Personas”中的结果: This is the result in table "Personas"

最后,这是我的实体模型(edmx): EntyModel

提前感谢您的帮助。最好的问候,

华金

2 个答案:

答案 0 :(得分:0)

更改db.colaboradores.Add(colaborador)db.Entry(colaborador).State = EntityState.Added 让其他国家独自一人。 EF非常聪明,能够理解关系并为您处理。

答案 1 :(得分:0)

我有3个构造函数:

flags.DEFINE_string('output_path', 'E:\\ml\\output\\filename.record', '')

编辑:尝试复制人物角色:

/// <summary>
/// Constructor por defecto
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public colaboradores() : base()
{
    this.donaciones = new HashSet<donaciones>();
}

/// <summary>
/// Constructor por parámetros de Colaboradores. Hereda de Persona
/// </summary>
/// <param name="ident">ID Autoincremental de la persona</param>
/// <param name="name">Nombre de la persona</param>
/// <param name="lastName">Apellidos de una persona</param>
/// <param name="postalAddress">Dirección postal de la persona</param>
/// <param name="postalCode">Codigo postal de la dirección postal de la persona</param>
/// <param name="city">Localidad de la persona</param>
/// <param name="state">Provincia correspondiente a la localidad de una persona</param>
/// <param name="country">Pais de la dirección postal de la persona</param>
/// <param name="phone1">Teléfono de contacto de la persona</param>
/// <param name="phone2">Teléfono de contacto secundario de la persona. Valor opcional y no requerido en los formularios.</param>
/// <param name="emailAddress">Dirección de correo electrónico de la persona.</param>
/// <param name="birthDate">Fecha de Nacimiento de la persona. Valor opcional no requerido en los formularios.</param>
/// <param name="CIF_NIF">Número de identificación fiscal de la persona o empresa que es colaborador.</param>
/// <param name="cuentaBancaria">Cuenta bancaria a dónde se realizarán los cargos de las donaciones.</param>

public colaboradores(int ident, string name, string lastName, string postalAddress, string postalCode, string city, string state, string country, string phone1, string phone2,
    string emailAddress, DateTime birthDate, string CIF_NIF, string cuentaBancaria) : base
    (ident, name, lastName, postalAddress, postalCode, city, state, country, phone1, phone2, emailAddress, birthDate)
{
    this.CIF_NIF = CIF_NIF;
    this.CuentaBancaria = cuentaBancaria;
}

/// <summary>
/// Constructor con parámetros para crear el colaborador cuando existe la donación.
/// </summary>
/// <param name="persona">Objeto de la clase persona.</param>
/// <param name="CIF_NIF">CIF o NIF de la persona que realiza la donación (se convierte en colaborador).</param>
/// <param name="cuentaBancaria">Cuenta bancaria a la que se emitirán las remesas bancarias</param>
public colaboradores(personas persona, string CIF_NIF, string cuentaBancaria) : base(persona)
{
    this.CIF_NIF = CIF_NIF;
    this.Cuent`enter code here`aBancaria = cuentaBancaria;
}

它不会在子实体“colaboradores”中创建记录。

由于