2

我有具有不同主 ID 名称的数据库第一实体... EmployeeID、CustomerID 等。我正在尝试构建一个通用存储库和 UoW 并想知道是否有任何方法,而不更改数据库,告诉 UoW 每个主 ID在数据库中,即employeeid 等,只会被称为id?

谢谢

我想我的问题不清楚,所以我将尝试一个我需要做的例子。谢谢你的耐心。

我有 3 个表,客户、订单和 orderdetails,客户表有一个主键字段 CustomerID。orders 表有一个主键字段 OrderID orderdetails 表有一个主键字段 orderdetailsid。

我有 3 个从 edmx 生成的实体,它们代表每个表。

我有一个通用存储库和工作单元来监控保存更改。我想有一个通用的说法,customerid 主键称为 id,orderid 主键也称为 id,最后 orderdetailsid 也称为 id。

我相信使用泛型可以让我创建一个返回主键的接口。

 public interface IEntity {
    int Id { get; }
 }

我相信我可以通过设计器中的所有实体并更改主键名称而不会影响数据库,但是当应用程序中可能有这样做的方法时,这将非常耗时。

谢谢

4

1 回答 1

0

根据我的经验,实现这种类型映射的唯一方法是通过使用模型构建器的流畅配置或使用模型上的数据注释 API 设置列名来设置列名

即数据注释

[Column("EmployeeId")]
public int ID { get; set; }

或在您的 Context 课程中流利

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

     modelBuilder.Entity<Person>().Property(e=>e.Id).HasColumnName("EmployeeId");

     base.OnModelCreating(modelBuilder);
}

但这将要求您不使用 edmx 或编写继承的 DbContext 来自定义您可能还想查看实体框架电动工具以消除对设计器的依赖,同时保持您快速生成实体类的能力,这将使您的类更多就映射您的实体而言可定制

在后一种情况下的另一种选择是您可以编写一个 DbConvention 来自定义您的映射以及本文提供了一些为实体框架编写自定义数据库约定的示例http://msdn.microsoft.com/en-us/data/jj819164.aspx

于 2013-04-07T05:38:44.183 回答