我正在開發一個實體框架代碼優先(v。4.4.0.0)C#庫與.Net Framework 4.0。將導航屬性映射爲實例var作爲外鍵
我不知道如何設置零對一的關係。我的型號如下:
A Talk
只能由一個用戶(StarterUserId
)創建。
A Talk
只能有一個接收用戶(RecepientUserId
)或只有一個組(RecipientGroupId
)。
注意:這意味着如果RecipientGroupId
不爲空,那麼RecepientUserId
爲空;或者如果RecipientGroupId
爲空,則RecepientUserId
不爲空。
A user
可以是零或n的收件人Talks
,但group
可以有零個或一個Talk
。
這是通話類:
[DataContract]
public class Talk
{
[DataMember]
public int TalkId { get; set; }
[DataMember]
public int StarterUserId { get; set; }
[DataMember]
public int? RecipientUserId { get; set; }
[DataMember]
[ForeignKey("RecipientGroup")]
public int? RecipientGroupId { get; set; }
public DateTime DateUtcStarted { get; set; }
[DataMember]
public string DateStarted
{
get
{
return DateUtcStarted.ToString("dd/MM/yyyy HH:mm");
}
set
{
DateUtcStarted = DateTime.Parse(value);
}
}
public User StarterUser { get; set; }
public User RecipientUser { get; set; }
public Group RecipientGroup { get; set; }
}
有了這個TalkConfiguration類:
class TalkConfiguration : EntityTypeConfiguration<Talk>
{
public TalkConfiguration()
{
Property(t => t.StarterUserId).IsRequired();
Property(t => t.RecipientUserId).IsOptional();
Property(t => t.RecipientGroupId).IsOptional();
Property(t => t.DateUtcStarted).IsRequired();
Ignore(t => t.DateStarted);
HasRequired(t => t.StarterUser).
WithMany(u => u.TalksStarted).
HasForeignKey(t => t.StarterUserId);
HasOptional(t => t.RecipientUser).
WithMany(u => u.InTalks).
HasForeignKey(t => t.RecipientUserId);
HasOptional(t => t.RecipientGroup).WithOptionalDependent(g => g.GroupTalk);
}
}
這是Group
類:
[DataContract]
public class Group
{
[DataMember]
public int GroupId { get; set; }
[ ... ]
public Talk GroupTalk { get; set; }
}
而GroupConfiguration
類:
class GroupConfiguration : EntityTypeConfiguration<Group>
{
public GroupConfiguration()
{
[ ... ] // Nothing related to GroupTalk
}
}
這些類和配置在我的數據庫得到這個Talk
表:
我要讓Talk.RecipientGroupId
爲FOREIGN KEY到Group.GroupId
。但是這個模型創建了另一列Talk.RecipientGroup_GroupId
作爲FOREIGN KEY到Group.GroupId
。而且,我不想那樣。
我該怎麼辦?
感謝您的回答。我不知道我在做什麼。我想表示談話可以有零個或一個小組;也許,可選:可選,不代表那個。 – VansFannel
@VansFannel:如果你還想表示一個'Group'只能參與一個對話或者不說話,那麼你的意圖就是將這個映射爲可選的:可選是很好的。但是,在這種情況下,EF不支持將外鍵作爲屬性公開。如果一個「組」可以參與一個以上的會話映射,那麼一對多的關係會更加適合(而且無論如何映射在技術上更容易)。 – Slauma