Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 首先在代码中定义与现有数据库的关系_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 首先在代码中定义与现有数据库的关系

Entity framework 首先在代码中定义与现有数据库的关系,entity-framework,ef-code-first,Entity Framework,Ef Code First,我有一个现有的数据库,有两个表:MemData和MemPhone MemData具有以下结构 uidMemberId (PK, uniqueidentifier not null) strFirstName (varchar(50), null) strLastName (varchar(50), null) uidMemberId (uniqueidentifier not null) strPhoneNumber (varchar(50), null) MemPhone具有以下结构 ui

我有一个现有的数据库,有两个表:MemData和MemPhone

MemData具有以下结构

uidMemberId (PK, uniqueidentifier not null)
strFirstName (varchar(50), null)
strLastName (varchar(50), null)
uidMemberId (uniqueidentifier not null)
strPhoneNumber (varchar(50), null)
MemPhone具有以下结构

uidMemberId (PK, uniqueidentifier not null)
strFirstName (varchar(50), null)
strLastName (varchar(50), null)
uidMemberId (uniqueidentifier not null)
strPhoneNumber (varchar(50), null)
MemberPhoneNumber表上没有PK。这两个表由uidMemberId连接,但数据库中没有设置外键

我的MemData模型如下所示:

[Table("MemData")]
public class Member
{
    [Key]
    public Guid MemberId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual IList<MemberPhoneNumber> MemberPhoneNumbers { get; set; }
}
[Table("MemPhone")]
public class MemberPhoneNumber
{
    [Key]
    public Guid MemberId { get; set; }
    public string PhoneNumber { get; set; }
    public virtual Member Member { get; set; }
}
我的MemPhone型号如下所示:

[Table("MemData")]
public class Member
{
    [Key]
    public Guid MemberId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual IList<MemberPhoneNumber> MemberPhoneNumbers { get; set; }
}
[Table("MemPhone")]
public class MemberPhoneNumber
{
    [Key]
    public Guid MemberId { get; set; }
    public string PhoneNumber { get; set; }
    public virtual Member Member { get; set; }
}
配置图如下所示:

 public MemberMap()
    {

        Property(t => t.MemberId).HasColumnName("uidMemberID");
        Property(t => t.FirstName).HasColumnName("strFirstName");
        Property(t => t.LastName).HasColumnName("strLastName");
        HasMany(x => x.MemberPhoneNumbers);
    }
  public MemberPhoneNumberMap()
    {
        Property(t => t.MemberId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
        Property(t => t.MemberId).HasColumnName("uidMemberID");
        Property(t => t.PhoneNumber).HasColumnName("strPhone");

    }
在我的MVC应用程序中,当我呼叫

Uow.Members.GetAll().Include(p => p.MemberPhoneNumbers).ToList()
我得到以下错误

Invalid column name 'Member_MemberId'.
它应该寻找MemData_uidMemberId,但我不知道我在配置中遗漏了什么


谢谢

默认情况下,外键名称将为propertyName\uEntityId。这就是EF试图映射到Member\u MemberId列的原因。为一对多关系提供外键配置

public class MemberMap : EntityTypeConfiguration<Member>
{
    public MemberMap()
    {
        ToTable("MemData");
        HasKey(m => m.MemberId);
        Property(m => m.MemberId).HasColumnName("uidMemberID");
        Property(m => m.FirstName).HasColumnName("strFirstName");
        Property(m => m.LastName).HasColumnName("strLastName");
        HasMany(x => x.MemberPhoneNumbers)
            .WithRequired(p => p.Member)
            .HasForeignKey(p => p.MemberId);
    }
}
公共类成员映射:EntityTypeConfiguration
{
公共成员映射()
{
ToTable(“MemData”);
HasKey(m=>m.MemberId);
属性(m=>m.MemberId).HasColumnName(“uidMemberID”);
属性(m=>m.FirstName).HasColumnName(“strFirstName”);
属性(m=>m.LastName).HasColumnName(“strLastName”);
HasMany(x=>x.MemberPhoneNumber)
.WithRequired(p=>p.Member)
.HasForeignKey(p=>p.MemberId);
}
}

还请记住,您可以使用流畅的配置配置键和表,您不需要使用数据注释属性污染实体。

谢谢,但我现在收到了不同的错误消息\tSystem.Data.Entity.Edm.edmsociationName::多重性在关系“Member\u MemberPhoneNumbers”中的角色“Member\u MemberPhoneNumbers\u Target”中无效。因为依赖角色指的是关键属性,所以依赖角色的多重性上限必须是“1”。@Mike-hmm,让我想想。您有MemberId作为电话号码的密钥。但如果会员有几部手机呢?我认为您的手机应该有单独的id。在一对多映射中,您不能将外键作为pk。我说得对吗?是的,你说得对,但我必须按原样处理结构。数据库不是我设计的。我不知道我需要先在EF代码中做什么。@Mike您应该将多重性更改为一对一(而不是电话列表,您应该有一个电话),或者在电话中添加主键列。然后一切都会好起来的DBA和我讨论过,他一直想在表中添加一个PK字段,所以我们都很好。谢谢你的帮助!