MVC5 代码第一个一对一关系错误

本文关键字:关系 错误 一对一 第一个 代码 MVC5 | 更新日期: 2023-09-27 18:35:06

我正在尝试为 MVC5 代码优先建立一对一关系。我查看了此页面并做了完全相同的事情,但是我遇到了错误。

这是我的课程和上下文:

产品:

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public string ProductDescription { get; set; }
    /// <summary>
    /// Display order
    /// </summary>
    public int Order { get; set; }
    public string TitleBackgroundColor { get; set; }
    public virtual TblClass TblClass { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
    public virtual ICollection<Price> Prices { get; set; }
    public virtual ICollection<ProductFeature> ProductFeatures { get; set; }
}

Tbl类:

 public class TblClass
{
    [Key, ForeignKey("Product")]
    public int ProductId { get; set; }
    public string ClassName { get; set; }
    public virtual ICollection<Permission> Permissions { get; set; }
    public virtual Product Product { get; set; }
    public int ClassOrder { get; set; }
}

DBContext:

   protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Role>()
            .HasMany<UserProfile>(r => r.UserProfiles)
            .WithMany(u => u.Roles)
            .Map(m =>
            {
                m.ToTable("webpages_UsersInRoles");
                m.MapLeftKey("RoleId");
                m.MapRightKey("UserId");
            });
        modelBuilder.Entity<TblClass>()
            .HasKey(c => c.ProductId);
        modelBuilder.Entity<Product>()
        .HasOptional(f => f.TblClass)
        .WithRequired(s => s.Product)
        .Map(t => t.MapKey("ProductId"));
    }

当我尝试运行"更新数据库-详细"时,出现此错误:

在类型"YazililarGaranti.Domain.Entities.TblClass"上声明的导航属性"Product"已配置了冲突的外键。

MVC5 代码第一个一对一关系错误

在建立 1:1 关系时,您不必使用 .Map(t => t.MapKey("ProductId")。这应该有效:

public class Product
{
    public int ProductId { get; set; }
    //... other properties
    public virtual TblClass TblClass { get; set; }
    //... other properties
}
public class TblClass
{
    //[Key, ForeignKey("Product")] <-- remove these attributes
    public int ProductId { get; set; }
    public string ClassName { get; set; }
    //.. other properties
    public virtual Product Product { get; set; }
    public int ClassOrder { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //other mappings
    modelBuilder.Entity<TblClass>()
        .HasKey(c => c.ProductId); 
    modelBuilder.Entity<Product>()
        .HasKey(c => c.ProductId); //consider to use database generated option
    //modelBuilder.Entity<Product>().Property(t => t.ProductId) 
        //.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    modelBuilder.Entity<Product>()
        .HasOptional(f => f.TblClass)
        .WithRequired(s => s.Product);
}

希望这有帮助!