.Net实体框架忽略基于ConnectionString的约束

时间:2018-05-03 09:52:51

标签: asp.net-mvc entity-framework connection-string

我在代码优先方法中有DBContext。它将接受连接字符串作为参数。

我可以根据User提供的连接字符串忽略外键约束吗?

public class EFDbContext : DbContext{
     public EFDbContext(string connection="Default"):base(connection)
     {
     }
     public DbSet<Contact> Contact { get; set; }
}

我的Contact课程如下:

public class Contact
{     
    [Key]
    public long ContactId { get; set; }


    //Foreign key to Contact
    [ForeignKey("SystemUsers")] //**Need to ignore this constaint If DB is NoRelationsDB**
    public Guid UserId { get; set; }
    public virtual SystemUsers SystemUsers { get; set; }
}

我对该实体的使用是:

 EFDbContext context=new EFDbContext();
 EFDbContext context1=new EFDbContext("NoRelationsDB"); //If the connection string is this then we have to ignore all the constraints in Tables.

1 个答案:

答案 0 :(得分:2)

  

我可以根据User提供的连接字符串忽略外键约束吗?

没有。外键约束是数据库中模式设计的一部分。将对所有用户强制执行(或不执行)约束。

在SQL Server中,有几种情况会忽略约束。如果将约束标记为NOT FOR REPLICATION,则允许复制代理绕过约束。如果您使用批量API加载数据,您可以选择跳过约束检查。

除此之外,您可以禁用所有约束,加载数据,然后重新启用它们。或者,您可以使用触发器来强制执行参照完整性,并对触发器进行编码以在某些条件下跳过检查。