Как определить ключи при работе с «EF-Code First»? - PullRequest
5 голосов
/ 05 января 2011

Я получаю исключение ModelValidationException (внизу) при работе с «EF-Code First».Он хочет, чтобы я определил ключ, но я не уверен, что именно это означает ...

public class Unit
{
    Guid id;
    String public_id;
    String name;        
    bool deleted;
}

public class MyDataContext : DbContext
{
    public DbSet<Unit> Units { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Unit>().ToTable("sometable");
    }
}

[TestFixture]
public class DataTests
{
    [Test]
    public void Test()
    {
        MyDataContext database = new MyDataContext();
        var o = database.Units;


        Console.WriteLine(o.Count()); // This line throws!
        Assert.IsTrue(true);
    }
}

System.Data.Entity.ModelConfiguration.ModelValidationException: одна или несколько ошибок проверки были обнаружены во времягенерация модели:

System.Data.Edm.EdmEntityType:: EntityType 'Unit' не определен ключ.Определите ключ для этого EntityType.

System.Data.Edm.EdmEntitySet: EntityType: Единицы EntitySet основаны на типе Unit, для которого не определены ключи.

Ответы [ 3 ]

8 голосов
/ 06 марта 2012

Создайте свойства полей, а затем используйте атрибут [Key] следующим образом:

[Key]
public Guid MyId { get; set; }

Чтобы получить KeyAttribute, вам нужно будет сослаться и импортировать System.ComponentModel.DataAnnotations. Более подробную информацию можно найти здесь .

3 голосов
/ 05 января 2011

Вам нужно использовать свойства, а не частные локальные переменные для всех полей, для которых EF создает поля базы данных.

Public Guid Id {get;установить;}

0 голосов
/ 08 ноября 2012

Без использования [Ключ], если вы используете имя столбца как public Guid UnitID {get; задавать; } тогда EF рассматривает этот столбец как ключевой столбец.

...