How do i define Keys when working with “EF-Code First”?
-
25-09-2019 - |
Question
I get a ModelValidationException (at the bottom) when working with "EF-Code First". It wants me to define a Key but I'm not sure what exactly it means...
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 : One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'Unit' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: The EntitySet Units is based on type Unit that has no keys defined.
Solution
You need to use properties, not private local variables for all the fields that you want EF to create database fields for.
Public Guid Id {get; set;}
OTHER TIPS
Make your fields properties, and then use the [Key]
attribute like this:
[Key]
public Guid MyId { get; set; }
You will have to reference and import System.ComponentModel.DataAnnotations to get the KeyAttribute. More info can be found here.
Without using [Key] if you use your column name as public Guid UnitID { get; set; } then EF considers this column as key column.