簡體   English   中英

自引用表實體框架插入記錄?

[英]self-reference table entity framework insert record?

無法確定相關操作的有效順序。 由於外鍵約束,模型要求或商店生成的值,可能存在依賴關系。

ASP.NET MVC3實體框架4.1

我的模型

public class OrganizationStructure
{
    public OrganizationStructure()
    {
        this.OrganizationStructures = new List<OrganizationStructure>();

        InputDate = DateTime.Now;
    }

    public int ID { get; set; }
    public string Name { get; set; }

    public int OrganizationStructureID { get; set; }
    public int OrganizationID { get; set; }
    public int OrganizationTypeID { get; set; }
    public int OrganizationActivityID { get; set; }
    public int OrganizationLocationID { get; set; }

    public string AddRemark { get; set; }
    public int UserId { get; set; }
    public DateTime InputDate { get; set; }
    public int? RemAttr { get; set; }

    public IList<OrganizationStructure> OrganizationStructures { get; private set; }

}

ID int未選中

名稱nvarchar(MAX)已檢查

OrganizationID int已檢查

OrganizationStructureID int未選中

OrganizationTypeID int已檢查

OrganizationLocationID int已檢查

OrganizationActivityID int已檢查

AddRemark nvarchar(MAX)已檢查

UserId int已檢查

InputDate datetime已檢查

RemAttr int已檢查

public ICommandResult Execute(CreateOrUpdateOrganizationStructureCommand command)
{
    var organizationStructure = new OrganizationStructure
    {
        ID = command.ID,
        Name = command.Name,

        OrganizationStructureID = command.OrganizationStructureID,
        OrganizationID = command.OrganizationID,
        OrganizationTypeID = command.OrganizationTypeID,
        OrganizationActivityID = command.OrganizationActivityID,
        OrganizationLocationID = command.OrganizationLocationID,

        AddRemark = command.AddRemark,
        UserId = command.UserId
    };
    if (organizationStructure.ID == 0)
        _organizationStructureRepository.Add(organizationStructure);
    else
        _organizationStructureRepository.Update(organizationStructure);
    _unitOfWork.Commit();
    return new CommandResult(true);
}

OrganizationStructureID屬性必須為可為空,否則您將無法插入具有自動遞增主鍵的記錄。

即使您具有OrganizationStructureID可為空的,EF也將無法處理循環關系。 您需要分兩步保存它。

using (var scope = new TransactionScope())
{
     var context = new MyContext();
     var organizationStructure = new OrganizationStructure {/* assign props */ };
     context.OrganizationStructures.Add(organizationStructure);

     context.SaveChanges(); // step 1

     organizationStructure.OrganizationStructures.Add(organizationStructure);

     context.SaveChanges(); // step 2

     scope.Complete();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM