如何使用Entity框架从多个其他模型创建一个模型的外来关系?

时间:2016-06-04 23:48:43

标签: c# asp.net asp.net-mvc entity-framework entity

我正在尝试使用ASP.NET MVC框架和Entity Framework 6创建我的第一个应用程序。

我选择使用代码优先方法,然后开始定义我的模型。

我有一个名为Client的模型,其标识属性为Id。我有多个模型,它们有一个名为ClientId的属性。 ClientId属性应具有指向Clients模型的虚拟链接。

以下是我的Client模型的样子

[Table("clients")]
public class Client
{
    [Key]
    public int id { get; set; }

    public string name { get; set; }
    public string status { get; set; }
    public DateTime created_at { get; set; }
    public DateTime? modified_at { get; set; }

    public Client()
    {
        status = "Active";
        created_at = DateTime.UtcNow;
    }
}

接下来是我如何使用其他模型创建属于关系。

[Table("BaseClientsToUsers")]
public class ClientToUser : ModelDefault
{
    [ForeignKey("User")]
    public int UserID { get; set; }

    [ForeignKey("Client")]
    public int ClientId { get; set; }

    [ForeignKey("Team")]
    public int DefaultTeamId { get; set; }

    public DateTime? JoinedAt { get; set; }

    public bool IsActive { get; set; }

    public virtual User User { get; set; }

    public virtual Client Client { get; set; }

    public virtual Team Team { get; set; }

    public ClientToUser()
    {
        DateTime UtcNow = DateTime.UtcNow;

        IsActive = true;

        CreatedAt = UtcNow;

        LastUpdatedAt = UtcNow;
    }



    [Table("BaseTeams")]
    public class Team : ModelDefault
    {
        [MaxLength(250)]
        public string Name { get; set; }

        [ForeignKey("Client")]
        public int ClientId { get; set; }

        public bool IsActive { get; set; }

        public virtual Client Client { get; set; }

        public Team()
        {
            DateTime UtcNow = DateTime.UtcNow;

            IsActive = true;

            CreatedAt = UtcNow;

            LastUpdatedAt = UtcNow;
        }
    }

但是,当我尝试更新我的数据库时,我收到以下错误

  

引入FOREIGN KEY约束   表'BaseTeams'上的'FK_dbo.BaseTeams_dbo.BaseClients_ClientId'可能   导致循环或多个级联路径。指定ON DELETE NO ACTION或   ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。可以   不创建约束或索引。查看以前的错误。

我不确定导致错误的原因,但似乎是因为我正在为同一个`Clients模型创建多个外键。

如何解决此错误?

1 个答案:

答案 0 :(得分:0)

Hello @Mike A当我启动MVC时我也遇到了这个错误,因此您需要连接数据库项目的附加表。 因此,尝试使用以下表格连接数据库项: 这是我的工作示例:

[Table("Products")]
public class Product
{
    [Key]
    public string Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public decimal InternalPrice { get; set; }
    public string Url { get; set; }
}

[Table("Categories")]
public class Category
{
    [Key]
    public string Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string Url { get; set; }
}

[Table("ProductCategories")]
public class ProductCategory
{
    [Key]
    [Column(Order = 0)]
    public string ProductId { get; set; }
    [Key]
    [Column(Order = 1)]
    public string CategoryId { get; set; }
    public virtual Category Category { get; set; }
}

因此,您可以毫无问题地连接您的物品,希望这对您有所帮助。