相关疑难解决方法(0)

如何在NULL列上创建唯一索引?

我正在使用SQL Server 2005.我想将列中的值限制为唯一,同时允许NULLS.

我当前的解决方案涉及视图上的唯一索引,如下所示:

CREATE VIEW vw_unq WITH SCHEMABINDING AS
    SELECT Column1
      FROM MyTable
     WHERE Column1 IS NOT NULL

CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
Run Code Online (Sandbox Code Playgroud)

有更好的想法吗?

sql sql-server indexing constraints unique

98
推荐指数
3
解决办法
9万
查看次数

具有重复NULL的SQL Server UNIQUE约束

可能重复:
如何创建唯一约束,该约束也允许sql server中的空值

我有一个表,我需要强制列具有唯一值.此列必须是可空的,并且应该允许业务逻辑使用多个NULL值,而其他重复值则不允许.

SQL Server UNIQUE约束在这种情况下并不好,因为它将NULL视为常规值,因此它将拒绝重复的NULL.

目前,BLL授予了价值唯一性,所以我不是在寻找一个肮脏的黑客来使其发挥作用.我只是想知道是否有一个干净的解决方案来在DB中强制执行此约束.

是的,我知道我可以写一个触发器来做到这一点:触发器是唯一的解决方案吗?(或者最好的解决方案呢?)

sql-server indexing

32
推荐指数
1
解决办法
2万
查看次数

首先了解实体框架代码中的ForeignKey属性

有关背景信息,请参阅以下帖子:

实体框架一到零或一个没有导航属性的关系

我一直认为这ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("DeferredDataId")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我在链接的帖子上发现这是不对的,因为DeferredData的主键被称为Id我实际需要:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int? DeferredDataId { get; set; }
    [ForeignKey("Id")]
    public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

ForeignKey用于指向其他类.

然后我继续改变其他一些参考文献:

public class MemberDataSet
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework foreign-keys code-first shared-primary-key

26
推荐指数
1
解决办法
7万
查看次数