DatabaseGeneratedOption.Identity not generating an Id

  1. you forgot the Key attribute. and there is no need to use virtual for primary key.
  2. as mentioned by Slauma you can't use Identity for string datatype.

Try this code:

public class Foo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public virtual string Name { get; set; }
}

Identities for string column types are not supported with SQL Server. (How do you expect such a string to look like?) To get this working you could - for example - add a computed column/user defined function in SQL Server that formats a string from an ordinary int identity column - as shown here.