C# 首先使用Fluent API EF代码约束出现问题

C# 首先使用Fluent API EF代码约束出现问题,c#,c#-4.0,entity-framework-6,entity-framework-core,C#,C# 4.0,Entity Framework 6,Entity Framework Core,我有两门课。 public class Om_MembershipCharges { [Key] public Int32 MembershipChargesID { get; set; } public Decimal Amount { get; set; } public Int16 PerMonth { get; set; } public Int16? MemebershipTypeID { get; set; } public virt

我有两门课。

public class Om_MembershipCharges
{
    [Key]
    public Int32 MembershipChargesID { get; set; }
    public Decimal Amount { get; set; }
    public Int16 PerMonth { get; set; }
    public Int16? MemebershipTypeID { get; set; }

    public virtual Om_MembershipType MemebershipType { get; set; }
}

public class Om_MembershipType
{
    [Key]
    public Int16 MemebershipTypeID { get; set; }
    public String MemebershipType { get; set; }
    public Boolean IsDefaultMembership { get; set; }

    public virtual ICollection<Om_MembershipCharges> MembershipCharges { get; set; }
}
public MembershipTypeMap()
{
    Property(x => x.MemebershipTypeID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    Property(x => x.MemebershipType)
        .IsRequired()
        .HasMaxLength(100)
        .HasColumnAnnotation
        (
            IndexAnnotation.AnnotationName,
            new IndexAnnotation
            (
                new IndexAttribute("U_MembershipType", 1) { IsUnique = true }
            )
        );

    Property(x => x.IsDefaultMembership).IsRequired();
    ToTable(clsCommon.tblMembershipType);
}


public class MembershipChargesMap : EntityTypeConfiguration<Om_MembershipCharges>
{
    public MembershipChargesMap()
    {
        Property(x => x.MembershipChargesID);

        Property(x => x.Amount).IsRequired();
        Property(x => x.PerMonth).IsRequired();
        Property(x => x.MemebershipTypeID).IsOptional();    
        ToTable(clsCommon.tblMembershipCharges);
    }
}
公共类Om_会员费
{
[关键]
公共Int32成员资格ChargeSid{get;set;}
公共十进制数{get;set;}
public Int16 PerMonth{get;set;}
public Int16?MemebershipTypeID{get;set;}
公共虚拟Om_MembershipType MembershipType{get;set;}
}
公共类Om_成员身份类型
{
[关键]
public Int16 membershipTypeId{get;set;}
公共字符串MemebershipType{get;set;}
公共布尔值IsDefaultMembership{get;set;}
公共虚拟ICollection成员资格费用{get;set;}
}
数据库模型如下。

public class Om_MembershipCharges
{
    [Key]
    public Int32 MembershipChargesID { get; set; }
    public Decimal Amount { get; set; }
    public Int16 PerMonth { get; set; }
    public Int16? MemebershipTypeID { get; set; }

    public virtual Om_MembershipType MemebershipType { get; set; }
}

public class Om_MembershipType
{
    [Key]
    public Int16 MemebershipTypeID { get; set; }
    public String MemebershipType { get; set; }
    public Boolean IsDefaultMembership { get; set; }

    public virtual ICollection<Om_MembershipCharges> MembershipCharges { get; set; }
}
public MembershipTypeMap()
{
    Property(x => x.MemebershipTypeID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    Property(x => x.MemebershipType)
        .IsRequired()
        .HasMaxLength(100)
        .HasColumnAnnotation
        (
            IndexAnnotation.AnnotationName,
            new IndexAnnotation
            (
                new IndexAttribute("U_MembershipType", 1) { IsUnique = true }
            )
        );

    Property(x => x.IsDefaultMembership).IsRequired();
    ToTable(clsCommon.tblMembershipType);
}


public class MembershipChargesMap : EntityTypeConfiguration<Om_MembershipCharges>
{
    public MembershipChargesMap()
    {
        Property(x => x.MembershipChargesID);

        Property(x => x.Amount).IsRequired();
        Property(x => x.PerMonth).IsRequired();
        Property(x => x.MemebershipTypeID).IsOptional();    
        ToTable(clsCommon.tblMembershipCharges);
    }
}
public MembershipTypeMap()
{
属性(x=>x.MemebershipTypeID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
属性(x=>x.MemebershipType)
.IsRequired()
.HasMaxLength(100)
.HasColumnAnnotation
(
IndexAnnotation.AnnotationName,
新指数注释法
(
新的索引属性(“U_MembershipType”,1){IsUnique=true}
)
);
属性(x=>x.IsDefaultMembership).IsRequired();
ToTable(clsCommon.tblMembershipType);
}
公共类成员资格费用映射:EntityTypeConfiguration
{
公共成员资格费用MAP()
{
属性(x=>x.MembershipChargesID);
属性(x=>x.Amount).IsRequired();
属性(x=>x.PerMonth).IsRequired();
属性(x=>x.MemebershipTypeID).iso可选();
ToTable(clsCommon.tblmembershippings);
}
}
最后,下面是限制条件

modelBuilder.Entity<Om_MembershipCharges>()
       .HasOptional(x => x.MemebershipType)
       .WithMany().HasForeignKey(x => x.MemebershipTypeID)
       .WillCascadeOnDelete(false);


modelBuilder.Entity<Om_MembershipCharges>()
    .HasRequired(m => m.MemebershipType).WithMany(m => m.MembershipCharges)
    .HasForeignKey(m => m.MembershipChargesID).WillCascadeOnDelete(false);
modelBuilder.Entity()
.has可选(x=>x.MemebershipType)
.WithMany().HasForeignKey(x=>x.MemebershipTypeID)
.WillCascadeOnDelete(假);
modelBuilder.Entity()
.HasRequired(m=>m.MemebershipType)。带有许多(m=>m.MembershipCharges)
.HasForeignKey(m=>m.MembershipChargesID).WillCascadeOnDelete(false);
我面临以下例外以前有人遇到过这种问题吗

在模型生成过程中检测到一个或多个验证错误:

Om_MembershipCharges_MembershipType_源::多重性不可用 在中的“Om\U成员资格费用\U成员资格类型\U来源”角色中有效 关系“Om\U成员资格费用\U成员资格类型”。因为 从属角色是指密钥属性,即 依赖角色的多重性必须为“1”。 Om\成员资格费用\成员资格类型\目标\ Om\成员资格费用\成员资格类型\来源: :引用的从属角色中所有属性的类型 约束必须与中相应的特性类型相同 主要作用。实体上的属性“MembershipChargesID”的类型 “Om_MembershipCharges”与属性类型不匹配 引用中实体“Om_MembershipType”上的“MembershipTypeId” 约束“Om\U成员资格费用\U成员资格类型”


您的最后一个代码片段

modelBuilder.Entity<Om_MembershipCharges>()
    .HasRequired(m => m.MemebershipType).WithMany(m => m.MembershipCharges)
    .HasForeignKey(m => m.MembershipChargesID).WillCascadeOnDelete(false);

旁注:我会将所有映射代码放入映射类中。将其保持在一起更便于维护。我想您甚至需要这样做,因为EF除了通过modelBuilder.Entity注册类型外,不允许您注册
EntityTypeConfiguration
s。Entity

您的实体之间的预期关系是什么?我想查看membership type表中的所有会员费记录。我想看看会员费表中的一种会员类型是第一个约束中的
with many
?如果是FK,则只能有一个。我认为我缺少约束中的某些内容,或者我做错了某些事情。请更正。感谢您的快速回复。我仍然面临同样的问题。到目前为止还不走运。这样更好吗?顺便问一下:您是否也在注册EntityTypeConfiguration?是的,长官EntityTypeConfiguration正在注册中。我仍然面临着同样的问题。请编辑答案,所有类和映射都像问题中那样完成。好像我错过了什么。