1

I'm working on an Entity Framework 5 Code First project. Right now I'm gettcannot be createding the error:

"Cascading foreign key 'FK_dbo.DriverLicense_dbo.Person_PersonId' where the referencing column 'DriverLicense.PersonId' is an identity column.\r\nCould not create constraint

These are my entities, Why I'm getting that error? I'm not saying PersonId is identity there in DriverLicense entity.

public class DriverLicense
{
    public long DriverLicenseId { get; set; }
    public long LicenseNumber { get; set; }
    public long PersonId { get; set; }
    public virtual Person Person { get; set; }
}

public class DriverLicenseMap : EntityTypeConfiguration<DriverLicense>
{
        public DriverLicenseMap()
        {
            this.HasKey(t => t.DriverLicenseId);

            // Table & Column Mappings
            this.ToTable("DriverLicense");
            this.Property(t => t.DriverLicenseId).HasColumnName("DriverLicenseId");
            this.Property(t => t.LicenseNumber).HasColumnName("LicenseNumber");
            this.Property(t => t.PersonId).HasColumnName("PersonId");

            this.HasRequired(t => t.Person)
                .WithMany(t => t.DriverLicenses)
                .HasForeignKey(d => d.PersonId);

        }
}

public class Person
{
    public Person()
    {
        this.DriverLicenses = new List<DriverLicense>();
    }

    public long PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<DriverLicense> DriverLicenses { get; set; }
}

 public class PersonMap : EntityTypeConfiguration<Person>
    {
        public PersonMap()
        {
            // Primary Key
            this.HasKey(t => t.PersonId);

            // Properties
            this.Property(t => t.FirstName)
                .IsRequired()
                .HasMaxLength(50);

            this.Property(t => t.LastName)
                .IsRequired()
                .HasMaxLength(50);

            // Table & Column Mappings
            this.ToTable("Person");
            this.Property(t => t.PersonId).HasColumnName("PersonId");
            this.Property(t => t.FirstName).HasColumnName("FirstName");
            this.Property(t => t.LastName).HasColumnName("LastName");

        }

Thanks in advance! Guillermo.

EDIT: With SQL Profiler I can see this:

CREATE TABLE [dbo].[DriverLicense] (
    [DriverLicenseId] [bigint] NOT NULL,
    [LicenseNumber] [bigint] NOT NULL,
    [PersonId] [bigint] NOT NULL IDENTITY,
    CONSTRAINT [PK_dbo.DriverLicense] PRIMARY KEY ([DriverLicenseId])
)

I do not understand why PersonId is created as Identity

polonskyg
  • 4,269
  • 9
  • 41
  • 93

2 Answers2

1

Ok, I've found the problem. I'm using Migrations, and there was one pending which had the wrong model. So, if you're in the same situation, check your pending migrations! :) Thanks! Guillermo.

polonskyg
  • 4,269
  • 9
  • 41
  • 93
0

i have the same problem:

you must change this public long PersonId { get; set; } property to public long? PersonId { get; set; }

because when you try to add for first time, a new DriverLicense you can't assign DriverLicense.PersonId to any object (because you don't have any Person for assign) so you must set PersonId property to nullable.

edit: this link can help you

Kasir Barati
  • 606
  • 13
  • 24