簡體   English   中英

實體框架表名稱約定

[英]Entity Framework table name convention

我正在使用EF 6,有兩個簡單的POCO類,如下所示:

public class Person
 {
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
 }

public class Company
{
    public int CompanyId { get; set; }
    public string Name { get; set; }
}

和我的背景

public class Context : DbContext
{
    public Context() : base("name=codefirst")
    {

    }
    public DbSet<Person> People { get; set; }
    public DbSet<Company> Corporation { get; set; }
}

和EF生成的表: dbo.Companiesdbo.People

我的問題是為什么一個表名是People,另一個表名是Companies(我知道為什么是復數)。 我的意思是,一個表使用屬性名,另一個表使用類名?

提前致謝!

在此處輸入圖片說明

兩者都使用其類名進行映射
可能使您感到困惑的一個是Person類的映射。 這是EF多元化規則之一,因為人是人的復數形式(意味着一個以上的人),因此EF將其映射為人。 另一方面,它只是將Company類映射為Companies。

如果您不喜歡,可以通過在OnModelCreating()方法中添加以下代碼來關閉EF復數約定:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

實體框架(EF)模型構建器在以代碼優先方式在數據庫中創建表時始終引用您的類名。 您的情況是PersonCompany EF在創建數據庫表時從不引用上下文類中的屬性。

在創建表時,它嘗試使名稱復數,因此Person變為PeopleCompany變為Companies

就像一個快速測試一樣,如果將Company類的名稱更改為Corporation則表名稱將被創建為Corporations 我還將上下文類中的相應屬性名稱Corporation更改為FooBar

這是我所做的測試:

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
public class Corporation
{
    public int CorporationId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Context : DbContext
{
    public Context() : base("name=codefirst")
    {

    }
    public DbSet<Person> People { get; set; }
    public DbSet<Corporation> FooBar { get; set; }
}

EF現在繼續進行操作,而是創建Corporations表( Corporation of Corporation ),並完全忽略上下文類中存在的FooBar屬性名。

在您的代碼中,您在上下文類中將屬性命名為People恰好是Person復數,這僅僅是一個巧合。 這讓您感到困惑,並且讓您開始思考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM