рдореЗрд░реЗ рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рд╡рд░реНрдЧ рд╣реИ:
public class Telefone : IEntity
{
public virtual int Id { get; protected internal set; }
public virtual string Tipo { get; set; }
public virtual string Numero { get; set; }
}
рдЖрдИрдбреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рдЬреЛ рдЖрдИрдбреА рдмрдирд╛рддрд╛ рд╣реИ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕реЗрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рддреЛ рдореЗрд░реА рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реАрдЗрдиреНрдлреЛ.рд╕реАрдПрд╕ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реА рдЧрдИ:
[assembly: InternalsVisibleTo("MyTestLayer")]
рдпрд╣ рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рд▓реЗрдХрд┐рди рдбреЛрдореЗрди рдкрд░рдд рдореЗрдВ рдирд╣реАрдВ!
рдкрд░реАрдХреНрд╖рдг рдкрд░рдд рдореЗрдВ
рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!
рдпреВрдЖрдИ рдкрд░рдд рдореЗрдВ
рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ! рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛!
var pessoa = fix.Build<Pessoa>()
.With(p => p.Nome)
.Do((pess) =>
{
fix.Build<Telefone>()
.With(p => p.Id)
.With(p => p.Tipo)
.With(p => p.Numero)
.OmitAutoProperties()
.CreateMany(10).ToList().ForEach(pess.Telefones.Add);
fix.Build<Email>()
.With(p => p.Id)
.With(p => p.Tipo)
.With(p => p.Endereco)
.OmitAutoProperties()
.CreateMany(10).ToList().ForEach(pess.Emails.Add);
})
.OmitAutoProperties()
.Create();
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЬрдм рдореЗрд░рд╛ рд░реЛрдб рдЯреЗрд╕реНрдЯ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
рд╕рдВрдкрддреНрддрд┐ "рдЖрдИрдбреА" рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рд╕рднреА рдЧреБрдг Id
s protected internal
ред
рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╡рд╣реА рдкрд░реАрдХреНрд╖рдг рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
рдирдпрд╛ рдЯреЗрд▓реАрдлреЛрди ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!
рдирдпрд╛ рдИрдореЗрд▓ ()ред рдЖрдИрдбреА = 1; // рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!
рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдореЗрдВ рдПрдХ _рд▓реАрдХреА рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди_ рд╣реИред рдПрдХ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реАрдорд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рдЖрдкрдХреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓ _not_ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реИред
InternalsVisibleTo
рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдЯреЛрдлрд┐рдХреНрд╕реНрдЪрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЕрд╕реЗрдВрдмрд▓реА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ _no_ рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХрднреА рднреА рдЖрдкрдХреЗ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░реВрдВрдЧрд╛:
``` рд╕реА#
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЯреЗрд▓реАрдлреЛрди: рдЖрдИрдИрдПрдирдЯреАрдЯреА
{
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЯреЗрд▓реАрдлреЛрди (рдЗрдВрдЯ рдЖрдИрдбреА)
{
рдпрд╣ред рдЖрдИрдбреА = рдЖрдИрдбреА;
}
public virtual int Id { get; private set; }
public virtual string Tipo { get; set; }
public virtual string Numero { get; set; }
}
```
рдЗрд╕рдиреЗ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╕рд░рдг рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд░реНрдЪрд╛рдПрдБ рдЙрддреНрдкрдиреНрди рдХреАрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
max (id) + 1
рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлрд┐рд░ рдореЗрд░реА рд╡рд╕реНрддреБ рдХрд╛ рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рддреЛ рдЖрдИрдбреА рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ?рдорд╛рдирд╛ рдХрд┐ рдпреЗ рд╕рднреА _рд╕рдорд╕реНрдпрд╛рдПрдВ_ рд╣реИрдВред рдпреЗ рдЪрд╛рд░реЛрдВ _strongly_ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЛрдореЗрди рдореЙрдбрд▓ рджреГрдврд╝рддрд╛ рдкрд░рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореИрдВ рдкреАрдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЧреНрд░рд┐рдб рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ рд╕рдорд╕реНрдпрд╛ AutoFixture рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдореВрдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддрд╛ рд╣реВрдВред
рдзрдиреНрдпрд╡рд╛рджред