Entity framework 6 扩展NopCommerce 3.6模型
我需要在Nop数据库中导入一个新表,并且需要像其他表一样创建数据访问层。 该表有一个名为SignatureId的主键列,我的客户端不想更改此名称。 所以我不能从BaseEntity抽象类继承,因为它意味着主键表必须调用“Id” 我的问题是: 创建不是从BaseEntity继承的新域实体类是否有问题?比如:Entity framework 6 扩展NopCommerce 3.6模型,entity-framework-6,nopcommerce,Entity Framework 6,Nopcommerce,我需要在Nop数据库中导入一个新表,并且需要像其他表一样创建数据访问层。 该表有一个名为SignatureId的主键列,我的客户端不想更改此名称。 所以我不能从BaseEntity抽象类继承,因为它意味着主键表必须调用“Id” 我的问题是: 创建不是从BaseEntity继承的新域实体类是否有问题?比如: public class Signature { public int SignatureId { get; set; } public string Hash{ get; set; }
public class Signature
{
public int SignatureId { get; set; }
public string Hash{ get; set; }
public.....
}
也许在实体操作过程中,它一定暗示了这个问题?你能给我一些建议吗?一个快速的解决方案是同时使用id和signatureId。因此,您将与您的客户和商业保持联系
存储库模式在nopcommerce中用于使用基本实体存储数据。因此,创建一个实体而不从基继承将破坏设计。我迟到了,但答案是可以的,即使你从基继承。您只需要在下面的映射中忽略它
public class Signature : BaseEntity
{
public int SignatureId { get; set; }
public string Hash{ get; set; }
public.....
}
在映射中,即Nop.Data->mapping
public class SignatureMap : NopEntityTypeConfiguration<Signature>
{
this.Ignore(c => c.Id);
this.HasKey(c => c.SignatureId);
}
公共类签名映射:NoEntityTypeConfiguration
{
忽略(c=>c.Id);
this.HasKey(c=>c.SignatureId);
}
简单一点,不要使用SignatureId,而是使用Id…这样做有什么好处,您只需要存储Id…在前端显示上显示SignatureId而不是Id…是的,这将是最好的解决方案,但这是不可能的,因为表签名已在多个应用程序中使用,有一些存储过程使用SeignatureId列select检索数据……那么只有一件事需要手动操作it@user1018697检查下面的“我的答案”您可以忽略Id,但存储库模式使用依赖于Id的查询。因此查询将中断并不会返回数据。@Jeyara它将仅为该实体忽略它。而且NoCommerceeRepository
不依赖名为Id
的列,它依赖于类型。上述实体签名
已从BaseEntity
继承。那么它会在哪里制造麻烦呢?如果我错了,请纠正我,efrepo中有一个getbyid查询。返回this.Entities.Find(id)代码>这是实体框架作业,用于检查适当的主键,我们已经指定主键不同。它没有显式地检查名为Id
的列。它讨论的是主键,而不是名为Id