如何在EF7中指定具有HasOne关系的自定义列名?
考虑以下示例类:
public class House
{
public int Id { get; set; }
public int BedroomCount { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string StreetName { get; set; }
public string StreetNumber { get; set; }
}
这种流畅的配置:
modelBuilder.Entity<House>()
.HasOne(x => x.Address)
.WithOne()
.OnDelete(DeleteBehavior.Cascade);
导致此数据库配置:
CREATE TABLE [House] (
[Id] int NOT NULL IDENTITY,
[AddressId] int,
[BedroomCount] int NOT NULL,
CONSTRAINT [PK_House] PRIMARY KEY ([Id]),
CONSTRAINT [FK_House_Address_AddressId] FOREIGN KEY ([AddressId]) REFERENCES [Address] ([Id]) ON DELETE CASCADE);
CREATE TABLE [Address] (
[Id] int NOT NULL IDENTITY,
[StreetName] nvarchar(max),
[StreetNumber] nvarchar(max),
CONSTRAINT [PK_Address] PRIMARY KEY ([Id]));
如何在House表中指定“AddressId”以外的列名?我找不到类似于HasColumnName的方法,就像在非导航属性上一样。
我正在使用Entity Framework 7 RC1-Final。
答案 0 :(得分:1)
您可以使用Data Annotations
配置您的关系的外键。
public int AddressID { get; set; }
[ForeignKey("AddressID")]
public Address Address { get; set; }
这需要一个将用作关系中的外键的属性。另请注意,除了影子外键之外,建议您为关系使用显式外键。这将阻止您在插入/更新时遇到很多问题,因为您不需要设置整个导航属性Address
来保存House
实体。查看问题here
未经测试但也许这可行(现在无法找到安装EF7的方法)
modelBuilder.Entity<House>()
.HasOne(x => x.Address)
.WithOne()
.OnDelete(DeleteBehavior.Cascade);
.HasForeignKey(x => x.AddressID);
您可以在此处查看更多示例:Foreign Key Relationships EF7
答案 1 :(得分:0)
您可以先从modelBuilder.Entity<House>().Metadata.GetProperties()
列表中获取属性,然后设置其名称
property.Relational().ColumnName = "YouCustomId"