Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Code First - Fatal编程技术网

Entity framework 实体框架代码第一外键映射

Entity framework 实体框架代码第一外键映射,entity-framework,code-first,Entity Framework,Code First,我有两个实体: 索赔ID,其他Primirive,另一个关系-索赔表 ClaimDetail ID、ClaimID、其他原语、关系-ClaimDetails 桌子 映射: modelBuilder.Entity<Claim>() .HasMany(x => x.ClaimDetails) .WithRequired(x => x.Claim)

我有两个实体:

索赔ID,其他Primirive,另一个关系-索赔表 ClaimDetail ID、ClaimID、其他原语、关系-ClaimDetails 桌子 映射:

modelBuilder.Entity<Claim>()
                        .HasMany(x => x.ClaimDetails)
                        .WithRequired(x => x.Claim)
                        .HasForeignKey(x => x.ClaimID)
如果我遗漏了映射,那么EF将生成另一个名为Claim_ID1的列。这有什么问题?我应该如何定义这种关系

编辑


不如尝试一些简单的属性映射,而不是流畅的API映射

流畅的API映射应该是


不如尝试一些简单的属性映射,而不是流畅的API映射

流畅的API映射应该是



上面缺少一个接口实现。在该接口中有一个返回集合的属性。[NotMapped]属性丢失,现在可用于关联。

上面缺少一个接口实现。在该接口中有一个返回集合的属性。[NotMapped]属性现在在关联中丢失。

没有运气:ClaimID、Claim\u ID、Claim_ID1@PeterKiss请从服务器资源管理器和App_数据中删除旧数据库,并使用属性映射示例再次运行更新数据库-Force。无法执行此操作。代码优先并不意味着自动创建数据库。@PeterKiss好吧,我假设您已经启用了迁移。但是如果您不能这样做,并且找到另一种方法来删除已经创建的列,那么您必须将所需的键映射到已经存在的列。从外观上看,ClaimId是在您尝试此示例时创建的,但您已经拥有Claim_ID和Claim_ID1。ClaimId是我的模型和数据库的一部分,其他两列是动态生成的。我真的不明白为什么框架会这样。没有运气:ClaimID,Claim,Claim_ID1@PeterKiss请从服务器资源管理器和App_数据中删除旧数据库,并使用属性映射示例再次运行更新数据库-Force。无法执行此操作。代码优先并不意味着自动创建数据库。@PeterKiss好吧,我假设您已经启用了迁移。但是如果您不能这样做,并且找到另一种方法来删除已经创建的列,那么您必须将所需的键映射到已经存在的列。从外观上看,ClaimId是在您尝试此示例时创建的,但您已经拥有Claim_ID和Claim_ID1。ClaimId是我的模型和数据库的一部分,其他两列是动态生成的。我真的不明白为什么框架会这样。无法重新编程。无论是否使用显式映射,我都只得到一个ClaimID,而忽略了不编译的内容。如果不将公共虚拟声明{get;set;}映射到它,那么:public virtual int ClaimID{get;set;}就没有任何意义。看,我是如何在我的回答中映射它的,奇怪的事情正在发生;我已经导出了EDMX,在XML中我看到的类型在我的解决方案中不再存在,甚至在排除的文件中也不存在。上面缺少一个接口实现。在该接口中有一个返回集合的属性。关联中缺少[NotMapped]属性。无法重新创建。无论是否使用显式映射,我都只得到一个ClaimID,而忽略了不编译的内容。如果不将公共虚拟声明{get;set;}映射到它,那么:public virtual int ClaimID{get;set;}就没有任何意义。看,我是如何在我的回答中映射它的,奇怪的事情正在发生;我已经导出了EDMX,在XML中我看到的类型在我的解决方案中不再存在,甚至在排除的文件中也不存在。上面缺少一个接口实现。在该接口中有一个返回集合的属性。关联中缺少[NotMapped]属性。
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
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; }
}
public class Claim 
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int ClaimId { get; set; }
   public string Name { get; set; }

   public virtual ICollection<ClaimDetail> ClaimDetails { get; set; }
}

public class ClaimDetail
{
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int ClaimDetailId { get; set; }

   [ForeignKey("Claim"), DatabaseGenerated(DatabaseGeneratedOption.None)]
   public int ClaimId { get; set; }

   public string Detail { get; set; }

   public virtual Claim Claim { get; set; }
}
modelBuilder.Entity<Claim>()
    .HasMany(c => c.ClaimDetail)
    .WithOptional()
    .Map(m => m.MapKey("ClaimId"));