2013-08-06 52 views
0

我有以下表结构简化如何关闭级联删除

public class UserProfile 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 

} 

public class Buyer 
{ 
    public int BuyerId { get; set; } 
    public int UserId { get; set; } 
    public UserProfile User { get; set; } 
    public ICollection<Order> Order { get; set; } 
} 

public class Seller 
{ 
    public int SellerId { get; set; } 
    public int UserId { get; set; } 
    public UserProfile User { get; set; } 
    public ICollection<Order> Orders { get; set; } 
} 

public class Order 
{ 
    public int OrderId { get; set; } 
    public int BuyerId { get; set; } 
    public int SellerId { get; set; } 
    public string Address { get; set; } 
    public <OrderLine> OrderLines { get; set; } 
} 

public class OrderLine 
{ 
    public int OrderId { get; set; } 
    public int OrderLineNo { get; set; } 
    public int StockId { get; set; } 
    public int Quantity { get; set; } 
} 

在实体框架代码第一次迁移一个以上的1至1表之间的关系是相同的表当我运行Update_Database命令我得到的以下错误

引入表'买家'上的FOREIGN KEY约束'FK_dbo.Buyers_dbo.UserProfile_UserId'可能会导致周期或多个级联路径。 DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

我的买方和卖方的表有对用户配置的用户ID 1对1的关系,所以我明白,当你删除它买方不能删除用户配置,因为有可能是卖方,反之亦然。

所以我想关闭级联删除,只有买方向用户和卖方使用流体语法给用户,但我不能得到的东西工作,所以如果有人可以帮助,将不胜感激。

我已经通过其他StackOVerflow问题看了同样的错误,但找不到符合我的方案。

额外:如果我将我的买方表中的UserId重命名为DummyUserId,那么Uppdate-Database命令可以工作,但这并不好。

回答

1

通常你可以禁用级联删除使用.WillCascadeOnDelete(false);

所以对你的映射,你可能有类似下面的内容:

 modelBuilder.Entity<Buyer>() 
      .HasRequired(x => x.User) 
      .WithMany() 
      .HasForeignKey(x => x.UserId) 
      .WillCascadeOnDelete(false); 
+0

地图方法改名从用户ID的外键的用户ID在数据库,所以我仍然可以在代码中将其称为UserId。有没有一种方法可以让Buyer表中的UserId数据库列重命名为UserID但保留UserId以便我的数据库列命名约定保持一致? – greay

+0

对不起,这只是我的一个错字,你应该可以使用'Map(m => m.MapKey(“UserId”))'。更新。重要的是'.WillCascadeOnDelete(false);'(你可以添加到你现有的映射设置中)。 – Chris

+0

如果是UserId,则Update-Database命令会给出指定错误的Schema无效。错误: (54,6):错误0019:类型中的每个属性名称必须是唯一的。属性名称'UserId'已经被定义。 – greay