2011-01-07 7 views
1

"사이트"에 대한 외래 키 관계가있는 테이블 "위치"가 있습니다. 나는 위치 siteid를 설정 한Linq-to-sql POCO - NULL 연결로 인해 삽입이 실패합니다.

An attempt was made to remove a relationship between a Site and a Location. However, one of the relationship's foreign keys (Location.SiteId) cannot be set to null. 

: 나는이 오류가 표시 위치 행을 저장하려고하면 그러나

Location l = new Location 
       { 
        Description = text, 
        FloorId = 0, 
        IsCurrentLoc = false, 
        LastMove = DateTime.Now, 
        MoveId = 0, 
        SiteId = 1 
       }; 

LocationTable.InsertOnSubmit(l); 
LocationTable.Context.SubmitChanges(); 

: 나는 시도하고 새 위치 레코드를 추가하는 SQL에 LINQ를 사용하고 있습니다 (사이트 ID 1이 데이터베이스에 있음).

감사 this 포스트 I에 ... 그래서 이런 일이 발생하지만, 그것을 해결하기 위해 어떻게하지 왜 알 -

[Table(Name = "Locations")] 
public class Location 
{ 

    private List<InstallLocation> _InstallLocations = new List<InstallLocation>(); 


    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    internal int LocationId { get; set; } 

    [Association(ThisKey = "SiteId", OtherKey = "SiteId", IsForeignKey = true)]   
    public Site Site 
    { 
     get; 
     set; 
    } 

    [AssociationAttribute(ThisKey = "LocationId", OtherKey = "LocationId")] 
    public List<InstallLocation> InstallLocations 
    { 
     get 
     { 
      return this._InstallLocations; 
     } 
     set 
     { 
      this._InstallLocations = value; 
     } 
    } 

} 

편집 :

내 LINQ - 투 - SQL 클래스는 다음과 같이 이제 무슨 일이 일어나는지 보자. "사이트"속성은 SiteId를 통해 선전을합니다. Site는 아무것도 설정하지 않으므로 SiteId를 null로 설정하려고 시도합니다. 허용되지 않으므로 실패합니다.

내가 잘 이해할 수없는 것은이 작업 방법입니다. 나는 데이터베이스에서 사이트 엔티티를로드하고 사이트를 설정하기 위해 DB 히트를 사용하고 싶지 않습니다. 나는 SiteId를 가지고 있으며 그것은 나의 "위치"를 유지하기 위해 내가해야 할 모든 것입니다.

아이디어가 있으십니까?

답변

0

이에 대한 해결책을 발견.

기본적으로 내 원래 게시가 닫혔습니다. 내가해야 할 일은 내 클래스에서 foreign 키 속성을 nullable로 허용하는 것이 었습니다. 이것은 DB에서 nullable이 아니기 때문에 반 직관적 인 것처럼 보이지만 나중에 L2S가 올바른 값으로 설정하기 전에이를 L2로 설정합니다.

전체 작업 코드는 위치가 사이트와 연결되는 방식을 보여줍니다.

[Table(Name = "Locations")] 
public class Location 
{ 

    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    internal int LocationId { get; set; } 

    [Column]   
    public int? SiteId { get; set; } 

    [Association(ThisKey = "SiteId", OtherKey = "SiteId", IsForeignKey = true)]   
    public Site Site 
    { 
     get; 
     set; 
    } 

} 
1

당신은 사이트 속성에 구현해야 할 수도 있습니다

DeleteOnNull="true" 

이 링크에서 획득 :

http://blogs.msdn.com/b/bethmassi/archive/2007/10/02/linq-to-sql-and-one-to-many-relationships.aspx

+0

감사합니다.하지만 해당 게시물을 발견하고 위치 클래스 SiteId 연결에 "DeleteOnNull = true"를 추가했습니다. 아무런 차이가 없었습니다 –

+0

고마워요,이 솔루션은 나를 위해 일했습니다! 나는 화제 시동기와 정확하게 동일한 문제가 있었다! 그러나 받아 들여진 해결책은 저를 위해 작동하지 않았습니다. –

관련 문제