3
我有一个包含两个表的现有数据库:MemData和MemPhone。用代码优先定义与现有数据库的关系
MEMDATA具有以下结构
uidMemberId (PK, uniqueidentifier not null)
strFirstName (varchar(50), null)
strLastName (varchar(50), null)
MemPhone具有以下结构
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; }
}
随着配置图看起来像这样:
public MemberMap()
{
Property(t => t.MemberId).HasColumnName("uidMemberID");
Property(t => t.FirstName).HasColumnName("strFirstName");
Property(t => t.LastName).HasColumnName("strLastName");
HasMany(x => x.MemberPhoneNumbers);
}
我MemPhone模式是这样的:
[Table("MemPhone")]
public class MemberPhoneNumber
{
[Key]
public Guid MemberId { get; set; }
public string PhoneNumber { get; set; }
public virtual Member Member { get; set; }
}
随着配置图看起来像这样:
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代替但我无法弄清楚我在配置中错过了什么。
感谢
谢谢,但我现在收到了一条不同的错误消息。 \ tSystem.Data.Entity.Edm.EdmAssociationEnd :: Multiplicity在关系'Member_MemberPhoneNumbers'中的角色'Member_MemberPhoneNumbers_Target'中无效。由于依赖角色是指关键属性,所以依赖角色的多重性的上界必须是'1'。 – Mike
@Mike嗯,让我想想。您有MemberId作为电话号码的钥匙。但如果会员有几部手机呢?我认为你的手机应该有单独的ID。您不能将外键作为pk在一对多映射中使用。我对吗? –
是的,你是对的,但我必须按照原样使用结构。我没有设计数据库。我不知道我是否可以在EF Code First中做什么。 – Mike