gpt4 book ai didi

c# - EF Composite key fluent API

转载 作者:太空狗 更新时间:2023-10-29 22:26:44 25 4
gpt4 key购买 nike

我正在尝试为实体映射复合键。

public class Customer 
{
public int CustomerId { get; set; }
public virtual List<CustomerImage> CustomerImages { get; set; }
}

及其 map :

public class CustomerMap : EntityTypeConfiguration<Customer>
{
public CustomerMap()
{
HasKey(t => t.CustomerId);
ToTable(DbConstants.k_CustomersImageTable);
}
}

图像:

public class Image
{
public int ImageId { get; set; }
}

及其 map :

public class ImageMap : EntityTypeConfiguration<Image>
{
public ImageMap()
{
HasKey(t => t.ImageId);
ToTable(DbConstants.k_ImagesTable);
}
}

和导航属性:

public class CustomerImage
{
public int CustomerId { get; set; }
public int ImageId { get; set; }
public virtual Customer CustomerRelated { get; set; }
public virtual Image ImageRelated { get; set; }
}

及其 map :

public class CustomerImageMap : EntityTypeConfiguration<CustomerImage>
{
public CustomerImageMap()
{
HasKey(t => new { t.CustomerId, t.ImageId });
Property(t => t.CustomerId).IsRequired().HasColumnOrder(0);
Property(t => t.ImageId).IsRequired().HasColumnOrder(1);
HasRequired(t => t.ImageRelated).WithMany().HasForeignKey(x => x.ImageId);
HasRequired(p => p.CustomerRelated)
.WithMany(p => p.CustomerImages)
.WillCascadeOnDelete(false);

ToTable(DbConstants.k_CustomersImageTable);
}
}

但我不断收到以下异常:

One or more validation errors were detected during model generation:
System.Data.Entity.Edm.EdmEntityType: : EntityType 'CustomerImage' has no key defined. Define the key for this EntityType.
System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'CustomerImages' is based on type 'CustomerImage' that has no keys defined.

但是,如果我用数据注释定义复合键,这不是很好,它可以完美地工作:

public class CustomerImage
{
[Key, Column(Order = 0)]
public int CustomerId { get; set; }
[Key, Column(Order = 1)]
public int ImageId { get; set; }
}

及其 map :

public class CustomerImageMap : EntityTypeConfiguration<CustomerImage>
{
public CustomerImageMap()
{
ToTable(DbConstants.k_CustomersImageTable);
}
}

我尝试了多种定义变体,但似乎都不起作用。任何的想法?是 EF 错误吗?

最佳答案

事实证明,我只是忘了将 map 放在 DbContext 上:

modelBuilder.Configurations.Add(new CustomerImageMap());

也就是说,复合 Id 仍然没有以这种方式填充到 $metadata 上。因此,使用数据注释,这是生成的元数据:

<EntityType Name="CustomerImage">
<Key>
<PropertyRef Name="CustomerId"/>
<PropertyRef Name="ImageId"/>
</Key>
<Property Name="CustomerId" Type="Edm.Int32" Nullable="false"/>
<Property Name="ImageId" Type="Edm.Int32" Nullable="false"/>
<Property Name="LastUpdated" Type="Edm.DateTime"/>
<NavigationProperty Name="Customer" Relationship="EasyBizy.Entities.Models.EasyBizy_Entities_Models_CustomerImage_Customer_EasyBizy_Entities_Models_Customer_CustomerPartner" ToRole="Customer" FromRole="CustomerPartner"/>
<NavigationProperty Name="Image" Relationship="EasyBizy.Entities.Models.EasyBizy_Entities_Models_CustomerImage_Image_EasyBizy_Entities_Models_Image_ImagePartner" ToRole="Image" FromRole="ImagePartner"/>
</EntityType>

但是,如果使用 Fluent API 而不是数据注释,则根本不会生成关键部分。为什么?

关于c# - EF Composite key fluent API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com