簡體   English   中英

更新唯一屬性實體框架

[英]Update Unique property entity framework

public  class Person
{    
    [Required]
    public int? KupaId { get; set; }

    [ForeignKey("KupaId")]
    public Kupa Kupa { get; set; }

    public int? newKupaId { get; set; }

    [ForeignKey("newKupaId")]
    public Kupa NewKupa { get; set; }
}  

public class Kupa
{
    public int Id { get; set; } 

    [Index("Ix_uniqueId", IsUnique = true)]
    public int ? uniqueId { get; set; } 
}

public class MyController:Controller
{ 

    public Json EditKupa(Expression<Func<Person,bool>> criteria )
    {
     using (IKupotRepository<Person> _IPersonRepository = new SQlRepository<Person>())
    {    
    Person personToEdit=_IPersonRepository.SingleOrDefault(criteria,GetIncludeProperties());
    > //Getting the new kupa obj from db

             newKupa = GetKupa(UniqueId);
   <//changing the unique property to null
             personToEdit.Kupa.ToremId = null;
             personToEdit.Kupa.State = State.Modified;

             personToEdit.NewKupa = newKupa;
>//Assign the unique id property the value that was in the first Kupa

             personToEdit.NewKupa.ToremId = 1;
             personToEdit.newKupaId = newKupa.Id;
             personToEdit.NewKupa.State = State.Modified;

           _IPersonRepository.SaveChanges();
            }

            }

調用saveChanges()時遇到異常:唯一鍵沖突,查看sql探查器時,我可以看到EF 6為兩個Kupa對象都生成了一個更新查詢,但它嘗試在更新NewKupa.uniqueId之前更新Kupa.uniqueId

假設您正在使用SQL Server作為數據庫服務器,這是因為您在該列中允許使用NULL值,而NULL = NULLNULL因此,如果在該列上有多個帶有NULL行,則會收到錯誤消息。

要在SQL語句中實現這一點,將是這樣的:

CREATE UNIQUE NONCLUSTERED INDEX Idx_UniqueId_NotNull
ON Kupa(uniqueId)
WHERE uniqueId IS NOT NULL;

然而,在EF要做到這一點有沒有簡單的方法,但在這一個解決辦法SO回答這里

暫無
暫無

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

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