์ง๋ฌธ์ด ์ ์ดํด๊ฐ ๋์ง๋ฅผ ์์ต๋๋ค. ๋จผ์ ์๋ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ข ๋ ์ค๋ช
ํด์ฃผ์๋ฉด ์ข๊ฒ ์ต๋๋ค.
์๋ ๋ด์ฉ์ ์ ๊ฐ ์ง๋ฌธ์ ์์ ํ ์ดํดํ์ง ๋ชปํ ์ํ์์ ๋ต๋ณ์ ๋๋ฆฌ๋ ๊ฒ์ด๋ ์ฐธ๊ณ ๋ง ํด์ฃผ์๊ณ , ๊ฐ๋ฅํ์๋ฉด ์ข ๋ ์๋(๊ฒฐ๊ณผ) ๊ด์ ์์ ๋ถ์ฐ ์ค๋ช
์ ํด์ฃผ์๋ฉด ์ข๊ฒ ์ต๋๋ค.

์์ ERD๋ ์์์
๋๋ค.
EF์์๋ ํ์ ์์ฑ์ด ํํ๋๋ฉด ๊ด๊ณ๋ฅผ ์์ ERD์ฒ๋ผ ๋งบ์ด ์ฃผ๋๋ฐ์,
ChildAs, ChildBs๋ ์ปฌ๋ ์
ํ์ ์์ฑ, ParentDataModel์ ์ฐธ์กฐ ํ์ ์์ฑ
ParentDataModel๋ ์ฃผ ์ํฐํฐ๊ฐ ๋๊ณ ChildA, ChildB, ChildAa๋ ์ข
์ ์ํฐํฐ๊ฐ ๋ฉ๋๋ค.
๋ณ๋ค๋ฅธ ํค๋ฅผ ํน์ฑ์ผ๋ก ํํํ์ง ์์๋ค๋ฉด Id๋ [Class์ด๋ฆ]Id์ ์ด๋ฆ์ผ๋ก ํค ์์ฑ์ ํํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ ์์ฑ์ ์ํด ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๊ฐ ํ์ฑ๋ฉ๋๋ค.
ChildA์ ChildB๊ฐ ๊ฐ์ด ์ด์ด์ง๊ฒ ํํํ๋๊ฒ์ ์๋ฏธํ๋์? ๊ทธ๋ ๋ค๋ฉด ์๋์ ๊ฐ์ด ํ์ ์์ฑ์ผ๋ก ํํํ ์ ์์ต๋๋ค.
public class ChildA : IEntity
{
....
public virtual ChildB ChildB { get; set; }
}
public class ChildB : IEntity
{
...
public virtual ChildA ChildA { get; set; }
}
๊ทธ๋ฆฌ๊ณ ํ์ ์์ฑ์ ํตํด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
var info = context.ParentDataModels.Where(x => x.Id = 10);
foreach (var childA in info.ChildAs) { ... }
foreach (var childB in info.ChildBs) { ... }
ํ์ ์์ฑ์ ์ํด์ ๊ด๊ณ๋ฅผ ๋ฐ๋ผ๊ฐ ์ ์์ผ๋ฏ๋ก ์ด๋ ๊ฒ ์ง์๋ ๊ฐ๋ฅํฉ๋๋ค.
var result = context.ParentDataModels.Where(x => x.Id = 10).ChildAs
.First()
.ChildB;
Listํ์์ ์์์ด ์ ๊ด์ ์์๋ ๋ง์ง ์๋ ํํ ๊ฐ์ต๋๋ค. ์์์ด ์๋๋ผ ์ํฐํฐ ๊ด๊ณ์์ ์ฃผ/์ข
๊ด๊ณ์ผ ๋ฟ์
๋๋ค. ์๋ฅผ๋ค์ด ์ฌ์ฉ์์ ๋ณด๊ฐ ์๊ณ ์ฌ์ฉ์๋ก๊ทธ์ธ์ด๋ ฅ์ด ์๋ค๋ฉด ์ฌ์ฉ์์ ๋ณด๋ ์ฃผ ์ํฐํฐ์ด๊ณ ์ฌ์ฉ์๋ก๊ทธ์ธ์ด๋ ฅ์ ์ข
์ํฐํฐ ์
๋๋ค. ์ด๊ฒ์ ํ์ ์์ฑ์ผ๋ก ํํํ ์ ์๊ฒ ๊ณ ์, ์ฌ์ฉ์๋ก๊ทธ์ธ์ด๋ ฅ์ ์ฌ์ฉ์์ ๋ณด ๊ด์ ์์ ์ผ๋๋ค์ด๋ฏ๋ก ๋ชฉ๋ก์ผ๋ก ํํ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๊ด๊ณ๊ฐ ํ์ฑ๋์๋ค๋ ์๋ฏธ๋ ๊ด๊ณ๊ฐ ํ์๋์๋ค๋ ๊ฒ์ด๊ณ ๊ทธ ๊ด๊ณ๋ ID๋ก ์๋ณํ๋ฏ๋กโฆ ์ฃผ ์ํฐํฐ ID๋ก ์ด์ด์ง๊ฒ ๋ฉ๋๋ค.