【问题标题】:One-to-one relationship in Entity Framework code-first实体框架代码优先中的一对一关系
【发布时间】:2015-09-20 16:01:43
【问题描述】:

我使用 C# EF 代码优先。我有以下 2 个课程:

public class Om_Currency
{
    [Key]
    public Int16 CurrencyID { get; set; }
    public String CurrencySymbol { get; set; }
    public Boolean IsActive { get; set; }

    public Int32 CountryID { get; set; }

    public virtual Om_Country Country { get; set; }
}

public class Om_Country
{
    [Key]
    public Int16 CountryID { get; set; }
    public String CountryName { get; set; }
    public Boolean IsActive { get; set; }

    public Int32 CurrencyID { get; set; }

    public virtual Om_Currency Currency { get; set; }
}

现在,我正在尝试在这两个类之间实现 1-1 关系。这样我就可以从Country 获取Currency 详细信息,并且可以从Currency 获取Country 详细信息。

 modelBuilder
        .Entity<Om_Country>()
        .HasOptional(f => f.Currency)
        .WithRequired(s => s.Country);

 modelBuilder
        .Entity<Om_Currency>()
        .HasOptional(f => f.Country)
        .WithRequired(s => s.Currency);

但我收到此错误:

在类型上声明的导航属性“国家/地区” 'ObjectModel.Country.Om_Currency' 已配置为冲突 多重性。

我是不是做错了什么?

这是Country的映射类:

public class CountryMap : EntityTypeConfiguration<Om_Country>
{
    public CountryMap()
    {
        Property(x => x.CountryID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.CountryName)
            .IsRequired()
            .HasMaxLength(100)
            .HasColumnAnnotation
            (
                IndexAnnotation.AnnotationName,
                new IndexAnnotation
                    (
                        new IndexAttribute("U_CountryName", 1) { IsUnique = true }
                    )
           );
        Property(x => x.IsActive).IsRequired();
        Property(x => x.CurrencyID).IsRequired();
        ToTable(clsCommon.tblCountry);
    }
}

这是Currency的映射类:

public class CurrencyMap : EntityTypeConfiguration<Om_Currency>
{
    public CurrencyMap()
    {
        Property(x => x.CurrencyID)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.CurrencySymbol)
            .IsRequired()
            .IsVariableLength()
            .HasMaxLength(50)
            .HasColumnAnnotation
            (
                IndexAnnotation.AnnotationName,
                new IndexAnnotation
                    (
                        new IndexAttribute("U_CurrencySymbol", 1) { IsUnique = true }
                    )
            );

        Property(x => x.IsActive).IsRequired();
        Property(x => x.CountryID).IsRequired();
        ToTable(clsCommon.tblCurrency);
    }
}

【问题讨论】:

    标签: c# c#-4.0 entity-framework-6


    【解决方案1】:

    我发现了这个问题。 I got the Solution from here

    而不是下面

    modelBuilder
        .Entity<Om_Country>()
        .HasOptional(f => f.Currency)
        .WithRequired(s => s.Country);
    
    modelBuilder
        .Entity<Om_Currency>()
        .HasOptional(f => f.Country)
        .WithRequired(s => s.Currency);
    

    应该在下面

    modelBuilder.Entity<Om_Country>()
        .HasRequired(x => x.Currency).WithMany()
        .HasForeignKey(x => x.CurrencyID).WillCascadeOnDelete(false);
    
    modelBuilder.Entity<Om_Currency>()
        .HasRequired(x => x.Country).WithMany()
        .HasForeignKey(x => x.CountryID).WillCascadeOnDelete(false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多