📜  EF 不会创建列 RULE - C# (1)

📅  最后修改于: 2023-12-03 15:14:50.931000             🧑  作者: Mango

EF 不会创建列 RULE - C#

介绍

在使用Entity Framework(EF)与数据库结合时,有时候你可能会遇到EF不会创建列规则的问题。这个问题通常出现在EF无法自动创建某些列的情况下。本文将提供一些解决此问题的方案。

解决方案

在EF无法自动创建列时,我们需要使用[NotMapped]属性来告诉EF不要映射这个属性到数据库中。在下面的示例中,我们要为Person实体添加一个FullName属性,但我们不想在数据库中添加FullName列,因此我们可以使用[NotMapped]属性:

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [NotMapped]
    public string FullName => $"{FirstName} {LastName}";
}

在上面的示例中,我们使用了一个只读属性来组合FirstNameLastName,并使用[NotMapped]属性告诉EF不要映射FullName到数据库中。

除了上面的方法,我们还可以使用Fluent API来配置属性是否映射到数据库中。以下是一个示例:

public class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .Ignore(p => p.FullName);
    }
}

上面的代码使用了Fluent API忽略了Person实体中的FullName属性。

总结

当EF无法自动创建列时,我们可以使用[NotMapped]属性或Fluent API来告诉EF不将属性映射到数据库中。