允许空外键GUID

时间:2014-09-23 16:40:20

标签: c# asp.net-mvc entity-framework guid ef-model-first

我想创建一个类似GUID的可空外键,如下所示

[ForeignKey("CreatedBy")]
[Display(Name = "Created by")]
public Guid? CreatedById { get; set; }

public virtual User CreatedBy { get; set; }

但是当我添加迁移并更新数据库时,它不会使它在SQL中的表设计中允许为空。

是否有另一种方法可以让它首先通过模型允许null?

2 个答案:

答案 0 :(得分:1)

不确定为什么你的工作不起作用或你弄清楚了。我们有相同的设计,我们可以获得可以为空的外键。我们通常使用Fluent配置,但我们没有对这些属性进行任何配置,因为EF在没有帮助的情况下将其计算出来。也许删除ForeignKey属性可能会修复它。

public virtual User CreateUser { get; set; }
public Guid? CreateUserId { get; set; }

答案 1 :(得分:0)

添加迁移时,会调用 OnModelCreating 方法来确定当前的模型配置。在那里,如果您有这样的代码:

  modelBuilder.Entity<ParentEntity>()
        .HasMany(e => e.ChildEntity)
        .WithRequired(e => e.CreatedBy)
        .HasForeignKey(e => e.CreatedById);

然后您告诉EF CreatedById 是必需的,因此不可为空(从SQL角度来看)。

要允许它为可空,请将代码更改为:

  modelBuilder.Entity<ParentEntity>()
        .HasMany(e => e.ChildEntity)
        .WithOptional(e => e.CreatedBy)
        .HasForeignKey(e => e.CreatedById);

请参阅:How do OnModelCreating and non automatic Migrations relate?