asp.net mvc实体框架代码先将外键与不同名称关联

Posted

技术标签:

【中文标题】asp.net mvc实体框架代码先将外键与不同名称关联【英文标题】:Asp.net mvc entity framework code first associate foreign key with different name 【发布时间】:2012-04-21 10:22:21 【问题描述】:

如何在此处将具有不同名称的外键关联起来:createdby 在 post 和 UserID 在 users 表中。

public class Post : IValidatableObject

    [Key]
    public long PostID  get; set; 

    public long? ParentPostID  get; set;       


    [ForeignKey("CreatedBy")]  
    public virtual User Users  get; set; 

    [ScaffoldColumn(false)]
    public DateTime? CreatedDate  get; set; 

    [ScaffoldColumn(false)]
    public long? CreatedBy  get; set;      


public class User

    [Key]
    public long UserID  get; set; 

    [Required]
    [MaxLength(20)]
    [Display(Name = "User Name")]
    public string UserName  get; set; 

【问题讨论】:

【参考方案1】:

您的映射是正确的 - 尤其是 [ForeignKey("CreatedBy")] 属性,您无需更改任何内容。

在实体框架中的外键关系中,依赖 (= Post) 及其外键始终引用主体的主键 (= User) - 并且主键是 UserID - 按照惯例还因为您已使用 Key 属性对其进行了标记。您无需再指定任何内容。

您的关系是可选的(0..1 对多),因为外键 CreatedBy 可以为空(long?)。因此,数据库中可能存在尚未由任何用户创建的帖子。如果您不希望这样,您可以使用不可为空的外键属性 (long CreatedBy) 来建立所需的关系。

【讨论】:

以上是关于asp.net mvc实体框架代码先将外键与不同名称关联的主要内容,如果未能解决你的问题,请参考以下文章

如何使用trackerenableddbcontext在asp.net mvc5和代码中的实体框架中实现审计跟踪

使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题

如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性

似乎无法使用 ASP.NET MVC 和实体框架返回我的模型

ASP.NET MVC Core 和实体框架中的 ToListAsync 不起作用

ASP.NET C# MVC 实体框架