我有2個實體:實體框架代碼第一外鍵映射
- 權利要求(ID,其它primirives,多了一個關係) - 權利要求表
- ClaimDetail(ID,ClaimID的,其他原語,關係) - ClaimDetails 表
映射:
modelBuilder.Entity<Claim>()
.HasMany(x => x.ClaimDetails)
.WithRequired(x => x.Claim)
.HasForeignKey(x => x.ClaimID)
甲屬泰德查詢:
exec sp_executesql N'SELECT
[Extent1].[ID] AS [ID],
[Extent1].[ClaimID] AS [ClaimID],
[Extent1].[UserID] AS [UserID],
[Extent1].[ClaimTypeID] AS [ClaimTypeID],
[Extent1].[PermissionID] AS [PermissionID],
[Extent1].[StartDate] AS [StartDate],
[Extent1].[EndDate] AS [EndDate],
[Extent1].[Justification] AS [Justification],
[Extent1].[Claim_ID] AS [Claim_ID]
FROM [dbo].[ClaimDetails] AS [Extent1]
OUTER APPLY (SELECT TOP (1) [Project1].[ClaimDetailStatusID] AS [ClaimDetailStatusID]
FROM (SELECT
[Extent2].[ClaimDetailStatusID] AS [ClaimDetailStatusID],
[Extent2].[CreatedOn] AS [CreatedOn]
FROM [dbo].[ClaimDetailStatus] AS [Extent2]
WHERE [Extent1].[ID] = [Extent2].[ClaimDetailID]
) AS [Project1]
ORDER BY [Project1].[CreatedOn] DESC) AS [Limit1]
WHERE ([Extent1].[UserID] = @p__linq__0) AND (NOT ([Limit1].[ClaimDetailStatusID] IN (12,11,4,7,13,10)))',N'@p__linq__0 int',@p__linq__0=4106
如果我離開了映射,然後EF會生成一個名爲Claim_ID1另一列。這有什麼問題?我應該如何定義關係?
編輯
public class Claim
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public int SenderID { get; set; }
[NotMapped]
public UserModel Sender { get; set; } //TODO:
[Required]
public DateTime Created { get; set; }
public string Note { get; set; }
[Required]
public int BossID { get; set; }
[NotMapped]
public UserModel Boss { get; set; } //TODO:
public virtual IList<ClaimDetail> ClaimDetails { get; set; }
public virtual IList<UserClaim> UserClaims { get; set; }
}
public class BaseClaimItem
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public int PermissionID { get; set; }
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
public string Justification { get; set; }
public virtual Permission Permission { get; set; }
[NotMapped]
public virtual UserModel Claimant { get; set; }
}
public class ClaimDetail : BaseClaimItem
{
[Required]
public virtual int ClaimID { get; set; }
[Required]
public int UserID {get;set;}
[NotMapped]
public override UserModel Claimant {get;set;}
[Required, Range(1, 5)]
public int ClaimTypeID { get; set; }
public virtual Claim Claim { get; set; }
public virtual IList<ClaimDetailStatus> ClaimDetailStatus { get; set; }
public virtual IList<Task> Tasks { get; set; }
public virtual IList<ClaimDetailApprovalStep> ClaimDetailApprovalSteps { get; set; }
public virtual ClaimType ClaimType { get; set; }
}
無法重現。無論是否顯式映射,我只會得到一個'ClaimID'(留下不編譯的東西)。 – 2013-05-12 20:48:14
這個:'public virtual int ClaimID {get;組; }'意味着什麼,如果你不映射'公共虛擬聲明聲明{get;組; ''給它。看,我的財產如何映射它在我的答案 – Komengem 2013-05-12 20:52:50
奇怪的事情正在發生;我導出了EDMX,並在XML中看到了我的解決方案中不存在的類型,即使在排除的文件中也不存在。 – 2013-05-12 21:01:52