title: Repository Add and Create methods
body: <p>Why are repositories' <code>.Add</code> method usually implemented as accepting the instance of entity to add, with the <code>.Id</code> already &quot;set&quot; (although it can be set again via reflection), which should be repo's responsibility?<br />
  Wouldn't it be better to implement it as <code>.CreateAndAdd</code>?</p>
  <p>For example, given a <code>Person</code> entity:</p>
  <pre><code>public class Person
  {
      public Person(uint id, string name)
      {
          this.Id = id;
          this.Name = name;
      }
  
      public uint Id { get; }
      public string Name { get; }
  }
  </code></pre>
  <p>why are repositories usually implemented as:</p>
  <pre><code>public interface IRpository&lt;T&gt;
  {
      Task&lt;T&gt; AddAsync(T entity);
  }
  </code></pre>
  <p>and not as:</p>
  <pre><code>public interface IPersonsRpository
  {
      Task&lt;Person&gt; CreateAndAddAsync(string name);
  }
  </code></pre>