2009-07-06 67 views
0

我有一个独特的要求,我希望LINQ to SQL可以实现。LINQ to SQL:如何使用列别名扩展实体类

首先,我扩展了一个旧的应用程序,所以我被困在当前的数据库列名和现有的LINQ实体类中。

我有一个LINQ包装用下面的方法:

public T Get(int id) where T : class, IEntity { 
    ... 
} 

IEntity看起来像:

public interface IEntity { 
    int Id { get; } 
} 

我的现有实体类(由LINQ生成)看起来像:

//this is not the exact code 
//it is just to give you an idea 
public parital class Widget { 
    public int WidgetId { get; set; } 
    public string WidgetName { get; set; } 
} 

因此,为了使Widget与我的包装一起工作,我将它扩展为IEntity,如:

public partial class Widget : IEntity { 
    public int Id { get { return WidgetId; } } 
} 

当我做了选择,如:

Repository<Widget>.Get(123); 

我得到一个错误说ID没有在SQL映射。

我想知道的是,有一种方法可以让Widget成为一个IEntity,并使用Id作为WidgetId的别名。已经有很多旧的代码(没有存储库包装器)被引用WidgetId,所以我不想改变它。

所有的建议表示赞赏。我是否在谈论这个错误?

回答

1

LINQ不知道要将Id转换为WidgetId

在O/R设计器中,您可以将列重命名为任何您需要的列。当你这样做时,LINQ将能够正确翻译列名。在O/R设计器中重命名它们根本不会影响数据库,因此它是非常安全的操作。您可以打开.designer.cs文件并查看如何使用属性将列名映射到类属性。

+0

我最近在这里阅读过SO,从数据库更改更新LINK到SQL模型的正确方法是删除它上的所有对象并再次从数据库中复制。那会摧毁这个变化,不是吗? LINQ to SQL直接映射到数据库,所以这看起来不太合适。 – 2009-07-07 04:41:58