현재이 문제가 발생합니다. POCO를 LINQ to SQL을 통해 데이터베이스 테이블에 수동으로 매핑했습니다. 이 모든 객체/테이블을 하나의 컨텍스트 (트랜잭션으로 처리됨)에 배치하여 트랜잭션에서 하나가 실패하면 모두 롤백 할 수 있도록하려고합니다.LINQ to SQL 1 : 1 삽입
이제 제가 직면하는 문제는 UserLogin과 UserProfile (1 : 0 - 1 관계)입니다. 그것들은 UserLogin의 ID가 PK이고 UserProfile에 대한 FK이고 UserProfile도 마찬가지입니다. UserLogin에서 IsDBGenerated를 true로 설정하여 ID를 자동으로 생성하도록 설정됩니다. 반면에 UserProfile에는 IsDBGenerated가 없습니다.
UserProfile은 UserLogin의 EntityRef로 설정되어 있으며 동일한 컨텍스트의 항목이므로 UserLogin.UserProfile = new UserProfile()을 만들 때 설정합니다.
모든 속성을 할당 한 후 table.InsertOnSubmit (UserLogin) 및 context.SaveChanges()를 수행했습니다. 진짜 문제는 어디에서 오는
이다. USERPROFILE의 ID는
누군가가 도와 드릴까요 0으로 남아있다?
미안하지만, 나 자신을 분명히하지 않았습니다. 1 관계 - 0 : 사용중인 SQL 서버는 MS SQL 서버 2008
엔티티 구조는 다음과 같이하고, 사용자 프로필이 그것에게 일을하지 동안
하고 UserLogin이 가입시 필수입니다. 따라서 두 테이블 모두에서 자동 증가가없는 것이 좋습니다.
UserProfile의 PK는 또한 UserLogin을 참조하는 FK입니다.
@GertArnold, 그렇습니다. asp.net 코드 숨김에서 UserProfile id = UserLogin id를 설정했지만 컨텍스트가 저장되기 전에 UserLogin의 ID는 0으로 유지됩니다.이 시점에서 두 레코드를 함께 추가하기를 원했기 때문입니다. Linq가 Sql에이 문제를 해결할 수있는 방법이 있는지 궁금합니다. 연관 속성을 추가 했으므로 Sql에서 Linq가이 종속성을 인식하고 제출시 ID를 추가해야합니다. 또는 적어도 저의 희망적인 생각입니다.
내 사용자 프로필에서,이 조각이 내하고 UserLogin에서
[Column(IsPrimaryKey = true)]
public long id { get; set; }
private EntityRef<UserLogin> _login;
[Association(ThisKey = "id", Storage = "_login")]
public UserLogin UserLogin { get { return _login.Entity; }
set { _login.Entity = value; } }
을, 나는 다음 코드가 :
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long id { get; set; }
private EntityRef<UserProfile> _profile;
[Association(ThisKey = "id", Storage = "_profile")]
public UserProfile UserProfile { get { return _profile.Entity; }
set { _profile.Entity = value; } }
마지막으로, 내 코드 숨김, 난이 있습니다
를UserLogin login = new UserLogin();
// All assigning here
login.UserProfile = new UserProfile();
// Assign here
login.userProfile.id = login.id;
이 시점에서 두 ID는 아직 삽입되지 않았기 때문에 0입니다.
context.SubmitChanges()를 수행하면 UserLogin의 ID가 증가하지만 UserProfile의 ID는 0으로 유지됩니다. 동일한 컨텍스트에서 둘 다 래핑하고 함께 제출하려는 이유는 UserLogin이 제출했지만 UserProfile은 오류가 발생합니다. 그래서 내 DB에는 로그인에 대한 기록이 있지만 프로필이 아니라 내 데이터가 엉망입니다.
어떤 유형의 데이터베이스를 사용하고 있습니까? UserProfile은 UserLogin의 하위 레코드이므로 (적어도 나에게 맞는 것 같습니다) 왜 Sentry에서는 UserProfile.Id가 AutoIncremting 필드가 될 수 있습니까? – esastincy