[英]One to many from one table to multiple tables
我該如何配置從一個表(帳戶)到兩個表的一對多關系
public class Account
{
public int AccountID { get; set; }
[Required(ErrorMessage = "Please enter a username")]
[Display(Name = "Username")]
public string Username { get; set; }
public string userid { get; set; }
[Required(ErrorMessage = "Please enter the password")]
[Display(Name = "Password")]
public string Password { get; set; }
public ICollection<Post> Posts { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Post
{
public int PostId { get; set; }
[Required]
public string Heading { get; set; }
[Required]
public string PostText { get; set; }
public virtual Account Account {get;set;}
public ICollection<Comment> Comments { get; set; }
}
public class Post
{
public int PostId { get; set; }
[Required]
public string Heading { get; set; }
[Required]
public string PostText { get; set; }
public virtual Account Account {get;set;}
public ICollection<Comment> Comments { get; set; }
}
以下是我的流利的api
modelBuilder.Entity<BusinessObjects.Account>().HasMany(a => a.Posts).WithRequired().Map(m => m.MapKey("AccountId"));
modelBuilder.Entity<BusinessObjects.Account>().HasMany(a => a.Comments).WithRequired().Map(m => m.MapKey("AccountId"));
modelBuilder.Entity<BusinessObjects.Post>().HasMany(p => p.Comments).WithRequired().Map(m => m.MapKey("Postid"));
以下是我得到的錯誤:
在表“ Posts”上引入FOREIGN KEY約束“ FK_dbo.Posts_dbo.Accounts_AccountId”可能會導致循環或多個級聯路徑。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 無法創建約束
我想我流利的api帳戶->發布可能不正確,有人可以提出解決方案嗎?
配置方式,所有關聯都是必需的,這意味着:
因此,如果刪除一個帳戶,則該帳戶具有多個路徑:
這會導致不一致,因為刪除帳戶時SQL Sever不知道確切要做什么。
為了解決這個問題,您應該考慮使用WithOptional()
替換一些WithRequired()
WithOptional()
,如果這對您有意義,然后再試一次。
例如,考慮:
modelBuilder.Entity<BusinessObjects.Account>().HasMany(a => a.Posts).WithOptional().Map(m => m.MapKey("AccountId"));
modelBuilder.Entity<BusinessObjects.Account>().HasMany(a => a.Comments).WithOptional().Map(m => m.MapKey("AccountId"));
modelBuilder.Entity<BusinessObjects.Post>().HasMany(p => p.Comments).WithRequired().Map(m => m.MapKey("Postid"));
或者,您可以使用.WillCascadeOnDelete(false)
禁用級聯刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.