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正在注册中。我仍然面临着同样的问题。请编辑答案,所有类和映射都像问题中那样完成。好像我错过了什么。