2009-09-24 4 views
1

: http://subsonicproject.com/docs/3.0_Migrations마이그레이션과 소닉 '관계'는 어떻게 처리합니까? 이 기사에 따르면

Bottom line: if you're a developer that is concerned about database design, 
migrations might not be for you. 

좋아, 그건 괜찮아요, 내가 데이터베이스 비즈니스 로직을 포함하지 않는 데이터를 단순히 영구 저장소를 처리 할 수 ​​있습니다. 즉, 영광스러운 텍스트 파일입니다.

어떻게 해야할지 모르겠지만 두 개체를 서로 관련시키는 것입니다. 이 두 클래스를 예를 들어 보자

public class Disaster 
{ 
    public int DisasterId { get; set; } 
    public string Name { get; set; } 
    public DateTime? Date { get; set; } 
    public IList<Address> Addresses { get; set; } 
} 

public class Address 
{ 
    public int AddressId { get; set; } 
    public string WholeAddressHereForSakeOfBrevity { get; set; } 
} 

Disaster는 재해로 타격을 입었다 여러 AddressesIList이 포함되어 있습니다. SimpleRepository을 사용하여 데이터베이스에 SimpleRepositoryOptions.RunMigrations을 추가하면 모든 열이 있지만 예상대로 외래 키 열이없는 테이블이 생성됩니다.

Disaster.Addresses으로 전화 할 때 영향을받는 모든 목록을 얻을 수 있도록이 두 항목을 어떻게 관련 지을 수 있습니까? Addresses? 이것이 가능합니까 아니면 대신 ActiveRecord를 사용하고 데이터베이스 테이블을 먼저 만들어야합니까? 아니면 재해의 ID에 대한 열을 Address에 추가해야합니까? 그렇다면이 메소드는 다 대다 관계에 대해 어떻게 작동합니까?

답변

1

가능합니다. 손으로 만 할 수 있습니다. "Addresses"라고 불리는 재해에 속성을 추가하고 그것을 IList <으로 만드십시오 (또는 지연로드를 원할 경우 IQueryable로 만들 수 있습니다). 재난을 회수 할 때 반드시 주소를 검색하십시오.

일종의 "수동"입니다.하지만 그 아이디어입니다. 나는 이것에 대한 개선 작업을하고 있는데, 나는 그 이후 릴리스를 추진하기를 희망하고있다.

그리고 내가 왜 처음에 그것을하지 않았는지 물어보기 전에 : 그것은 Many to Many 또는 1-Many를 부모/자식 관계에 기반하여 사용해야하는지 잘 모르겠다. 귀하의 예에서는 아마도 1 : 1로 추정되지만 주소와 재해 (특히 플로리다의 경우)에 관해서는 많은 것을 알고 있어야합니다.

결론 - 어떻게 SubSonic이 이것을 알고 있습니까? 우리는 두 가지 객체 모두를 "양방향성"으로 내성 할 수 있습니다. 즉, Address가 많은 것보다 많은 재해가있는 경우 (명백 함) - DDD가 좋으면 코딩이 행복하지 않습니다.

나는이 규칙을 무시하고 문제를 일으킬 수있는 몇 가지 유형의 재정의 유형으로 기울이고 있습니다. 내 생각은 환영합니다 :)

+0

원본 게시물에서 제공 한 코드에서 알 수 있듯이 IList (지연로드를 원하기 때문에 IQueryable로 변환되었습니다)를 Disaster 클래스에 추가했습니다. . 그러나, 나는 당신이 '당신의 주소를 반드시 검색하도록하라'는 의미가 무엇인지 확신하지 못합니다. 이 연결이 데이터베이스에 저장되어 있지 않으면 검색 할 주소를 어떻게 알 수 있습니까? –

+0

데이터베이스와 관련이 없다면 ... 저를 잃어 버렸습니다. 그것이 다른 시스템에 있다면, 내가 필요할 때 그것을 부르십시오. –

관련 문제