Database First ID,EmployeeID被称为id

时间:2013-03-24 14:38:04

标签: asp.net-mvc-4 repository entity-framework-5 unit-of-work

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

由于

我想我的问题不明确,所以我会尝试一下我需要做的事情。谢谢你的耐心等待。

我有3张表,客户,订单和订单详情, customer表具有主键字段CustomerID。 orders表具有主键字段OrderID orderdetails表有一个主键字段orderdetailsid。

我有3个实体,由edmx生成,代表每个表。

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

我相信使用泛型将允许我创建一个返回主键的接口。

 public interface IEntity {
    int Id { get; }
 }

我相信我可以浏览设计器中的所有实体并在不影响数据库的情况下更改主键名称,但如果在应用程序中可能有这样的方法,那将是非常耗时的。

由于

1 个答案:

答案 0 :(得分:0)

根据我的经验,实现此类映射的唯一方法是使用模型构建器通过流畅配置设置列名,或者使用模型上的Data Annotations 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来自定义您可能还需要查看Entity框架电源工具以消除对设计人员的依赖,同时保持您的abiliy以快速生成您的实体类您的类可以更自定义,只需映射您的实体

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