1

我正在开发一个 Entity Framework 5 Code First 项目。现在我无法创建错误:

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

这些是我的实体,为什么我会收到该错误?我不是说 PersonId 是 DriverLicense 实体中的身份。

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");

        }

提前致谢!吉列尔莫。

编辑:使用 SQL Profiler 我可以看到:

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

我不明白为什么将 PersonId 创建为 Identity

4

2 回答 2

1

好的,我找到了问题所在。我正在使用迁移,并且有一个未决的模型错误。因此,如果您处于同样的情况,请检查您的待处理迁移!:) 谢谢!吉列尔莫。

于 2012-12-26T22:43:30.377 回答
0

我也有同样的问题:

您必须将此public long PersonId { get; set; }属性更改为public long? PersonId { get; set; }

因为当您第一次尝试添加新的 DriverLicense 时,您无法将 DriverLicense.PersonId 分配给任何对象(因为您没有任何要分配的 Person),因此您必须将 PersonId 属性设置为可为空。

编辑: 这个链接可以帮助你

于 2018-02-14T06:37:39.993 回答