LINQ2SQL에서 일대일 관계를 저장하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/432510

  •  10-07-2019
  •  | 
  •  

문제

LINQ2SQL에서 간단한 일대일 관계를 저장하는 가장 좋은 방법을 찾으려고 노력하고 있습니다.

다음 POCO 모델 (PSEDUO 코드 BTW)이 있다고 가정하자.

사람은 많은 vechicles에 0을 가지고 있습니다.

class Person
{
    IList<Vehicle> Vehicle;
}

class Vehicle
{
    string Name;
    string Colour;
}

이제 사람을 저장할 때, 나는 그 poco 객체를 저장소 코드 (L2S)로 전달합니다. 나는 사람의 반사를 잘 저장할 수 있습니다. 나는 보통 이것을한다.

using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

나는 사람이 가질 수있는 차량 목록을 어디서 어떻게 처리 해야하는지 잘 모르겠습니다. 제안이 있습니까?

도움이 되었습니까?

해결책

using (Db db = new Db())
{
    var newPerson = db.People.SingleOrDefault(p => p.Id == person.Id) ?? new SqlContext.Person();
    // Left to right stuff.
    newPerson.Name = person.Name;
    newPerson.Age = person.Age;

    // add vehicles.
    Vehicle firstV = new Vehicle();
    firstV.Name = "some name";
    firstV.Person = newPerson; // need to do this to set the person Id on the vehicle.
    newPerson.Vehicle.Add(firstV);
    // now when you save the Person it should save the Vehicle list 
    // if you set Cascade save update on the list. (not sure how to do that in L2S

    if (newPerson.Id <= 0)
        db.People.InsertOnSubmit(newPerson);
    db.SubmitChanges();
}

이제 인터페이스에서 나오는 데이터와 함께 차량 목록을 다른 수준에서 구성하도록 선택할 수 있습니다.

그러나 사람 개체의 목록에 차량을 추가하는 것만으로는 충분하지 않다는 것을 기억해야합니다. 또한 차량 인물 재산을 차량이있는 사람에게 설정해야합니다.

관찰 나는 이것에 대해 확실하지 않지만 당신이 할 때 db.people.singleordefault 당신은 전체 사람들 테이블을 메모리에로드 할 수 있습니다. 그것은 당신이하고 싶은 일이 아닙니다. 주석에서 슬레이스에 의해 수정되었습니다.

다른 팁

데이터베이스 내에 적절한 관계가 설정되어 있는지 확인하기 만하면됩니다.

차량 테이블에 PersonID가 있고 DBML LINQ에 SQL에 추가 할 때 외국 키가있는 경우, SQL에 SQL에 관계가 있음을 감지하고 Table<T> 관계의 표현.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top