0

我正在将现有的 EF 模型转换为首先使用代码。

它有许多复杂类型,具有特定的数据库字段命名约定:

<propertyName>_<complexTypeName>_<complexTypeProperty>

例如,这个复杂类型:

public class ContactDetails {
    public string Address1 {get;set;}
    public string City {get;set;}
    // ...etc
}

在此实体中使用:

public class Customer {
    public int ID {get;set;}
    public string Name {get;set;}
    public ContactDetails BillingAddress {get;set;}
    public ContactDetails DeliveryAddress {get;set;}
}

它出现在这样的数据库表中:

CREATE TABLE dbo.Customers (
    ID INT NOT NULL,
    Name NVARCHAR(30),
    BillingAddress_ContactDetails_Address1 NVARCHAR(100),
    BillingAddress_ContactDetails_City NVARCHAR(100),
    DeliveryAddress_ContactDetails_Address1 NVARCHAR(100),
    DeliveryAddress_ContactDetails_City NVARCHAR(100)
)

所以我需要更改复杂类型的默认命名约定。我可以像这样使用 Fluent 手动更新每个列名:

modelBuilder.Entity<Customer>().Property(x => x.BillingAddress.Address1).HasColumnName("BillingAddress_ContactDetails_Address1");
modelBuilder.Entity<Customer>().Property(x => x.BillingAddress.City).HasColumnName("BillingAddress_ContactDetails_City");
modelBuilder.Entity<Customer>().Property(x => x.DeliveryAddress.Address1).HasColumnName("DeliveryAddress_ContactDetails_Address1");
modelBuilder.Entity<Customer>().Property(x => x.DeliveryAddress.City).HasColumnName("DeliveryAddress_ContactDetails_City");

问题是它ContactDetails在整个数据库中的许多不同表中多次使用。所以我想一次性配置它们。我需要这样的东西:

modelBuilder.ComplexType<ContactDetails>().Property(x => x.Address1).HasColumnName($"{???}_{???}_Address1");
modelBuilder.ComplexType<ContactDetails>().Property(x => x.City).HasColumnName($"{???}_{???}_City");

但是如何填写这些{???}部分?在这种情况下,我可以从哪里获取属性名称和类型名称?

4

0 回答 0