Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据库+MVC4中创建新记录时出现问题_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 在数据库+MVC4中创建新记录时出现问题

C# 在数据库+MVC4中创建新记录时出现问题,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我在数据库中有两个表PartyRole和PartyRoleType,其应用程序中的模型为: PartyRole: public partial class PartyRole : ILockable, IAuditable, IOverTime { /*** Construtor(s) ***/ public PartyRole() { } public PartyRole(PartyRoleType obj) : this()

我在数据库中有两个表PartyRole和PartyRoleType,其应用程序中的模型为:

PartyRole:

 public partial class PartyRole : ILockable, IAuditable, IOverTime
{
    /*** Construtor(s) ***/
    public PartyRole()
    {
    }

    public PartyRole(PartyRoleType obj)
        : this()
    {
        PartyRoleType = obj;
    }

    /*** Public Members ***/
    [Key, Display(Name = "Id")]
    public int PartyRoleId { get; set; }

    [Required]
    public int PartyRoleTypeId { get; set; }

    [Required]
    public int PartyId { get; set; }


    /* IOverTime */
    [Required, Display(Name = "From")]
    public System.DateTimeOffset FromDate { get; set; }

    [Display(Name = "Thru")]
    public Nullable<System.DateTimeOffset> ThruDate { get; set; }


    /* Navigation Properties */

    /// <summary>
    /// Foreign key to PartyRoleType: PartyRoleTypeId
    /// </summary>
    public virtual PartyRoleType PartyRoleType { get; set; }
}
填充PartyRoleTypes的代码:

<div class="l">
PartyRoleType
@(Html.DropDownListFor(O =>
    O.PartyRoleTypeId,
     ((IEnumerable<PartyBiz.Models.Objects.PartyRoleType>)ViewBag.PossiblePartyRoleTypes)
        .Select(OPT =>
            new SelectListItem
            {
                Text = (OPT == null ? "None" : OPT.Caption),
                Value = OPT.PartyRoleTypeId.ToString(),
                Selected = (Model != null) && (OPT.PartyRoleTypeId == Model.PartyRoleTypeId)
            }
        ),
        "Choose...",
        new { @class = "combo"}
    )
)
@Html.ValidationMessageFor(o => o.PartyRoleTypeId)
</div>

为什么不在数据库中插入一些伪PartyRoleTypes呢?看来你是想先车后马,除非我误解了-你有PartyRoleType中的数据吗?。在PartyRole课程中,您有:

[Required]
public int PartyRoleTypeId { get; set; }
所以必须至少定义一个PartyRoleType。至于为什么它试图为你插入一个我不确定-但当我有这样的关系-我总是插入一些虚拟类型的参考

接下来,在你的评论之后,我发现这不是问题所在

这里发生了什么:

obj.Party.PartyId = obj.PartyId;
obj.PartyRoleType.PartyRoleTypeId = obj.PartyRoleTypeId;

obj属于PartyRole类型,在PartyRole类中,我看不到Party的定义。那么你是如何设置obj.Party.PartyId的呢?PartyRole类是否已传递到您的Action方法的某个视图模型中?

我们需要将null传递给PartyRole的PartyRoleType属性,以便不创建子对象:

我有很多PartyRoleType的数据。来自PartyRoleType的标题,我在mvc视图的下拉列表中显示它,以便用户可以为他正在创建的partyrole复制一个类型。PartyRoleTypeId是PartyRole中的外键。我们定义不在PartyRoleType中插入任何伪数据,因为创建新类型是一个不同的过程。我们从客户那里得到允许的类型列表,并以不同的方式更新这些表。这里有一些关于Unitofwork的内容。保存,我们并不总是希望它创建子记录,这是错误的!!!是的,这绝对是错误的:。那就奇怪了,恐怕我误解了。您可以显示填充PartyRoleType下拉列表的代码吗?传递到controller的PartyRole类是整个PartyRole模型对象。您可以忽略行-obj.Party.PartyId=obj.PartyId;,这是因为Party是PartyRole的另一个孩子而添加的。我更新obj.PartyRoleType.PartyRoleTypeId=obj.PartyRoleTypeId的原因;is-partyrole对象有子对象partyrole,它的partyroletypeid为null,unitofwork引发引用完整性约束错误,因此我已显式更新partyroletypeid。
[Required]
public int PartyRoleTypeId { get; set; }
obj.Party.PartyId = obj.PartyId;
obj.PartyRoleType.PartyRoleTypeId = obj.PartyRoleTypeId;