实体框架中的一对一关系代码优先

时间:2015-09-20 03:18:32

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

我首先使用C#EF代码。我有以下两个班级:

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关系。因此,我可以从Currency获取Country个详细信息,Country可以从Currency获取详细信息。

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

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

但是我收到了这个错误:

  

导航属性&#39;国家/地区&#39;在类型上声明   &#39; ObjectModel.Country.Om_Currency&#39;已配置冲突   多重性。

我做错了吗?

这是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);
    }
}

1 个答案:

答案 0 :(得分:0)

我想出了这个问题。的 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);