假設我有以下表和關係:T4關係代
CREATE TABLE [dbo].[Customers] (
[CustomerID] [int] IDENTITY(1,1) NOT NULL,
[Description] [nvarchar](255) NOT NULL
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
CREATE TABLE [dbo].[Orders](
[OrderID] [int] IDENTITY(1,1) NOT NULL,
[CustomerID] [int] NOT NULL,
...
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED ([OrderID] ASC)
ALTER TABLE [dbo].[Orders] WITH CHECK ADD CONSTRAINT [FK_Orders_Customers]
FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([CustomerID])
我使用一些T4模板爲每個數據庫列的屬性,以生成簡單的POCO類。這很簡單,很有趣。事實上,我的代碼能夠產生用於每個表中的單個類像以下示例
public class Customer {
public int CustomerID { get; set; }
public string Description { get; set; }
}
在我現在想也創建映射(1-N的表之間的關係的代碼,1-1 )所以要獲得,例如像這樣的一個類
public class Customer {
public int CustomerID { get; set; }
public string Description { get; set; }
public IList<Order> Orders { get; set; }
}
不幸的是我的代碼不起作用。那就是:
foreach (NavigationProperty navProperty in entity.NavigationProperties.Where(p => p.DeclaringType == entity)) {
string elementType = ((EntityType)((RefType)navProperty.ToEndMember.TypeUsage.EdmType).ElementType).Name;
string relationshipName = navProperty.ToEndMember.DeclaringType.FullName;
string targetRoleName = navProperty.ToEndMember.Name;
if (navProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many) {
<#=Accessibility.ForProperty(navProperty) #> IList<<#=navProperty.Name#>> <#=navProperty.Name#> { get; set; }
}
}
很不幸,這產生像這樣的代碼:
public class Customer {
public int CustomerID { get; set; }
public string Description { get; set; }
public IList<Orders> Orders { get; set; } // NOTE THE PLURAL IN THE TYPE NAME!!!
}
這是實體集名稱不是實體名稱。我需要做些什麼來解決這個問題?
注意:我使用的是.NET 3.5版本的EF。我也是其中包括EF.Utility.CS.ttinclude
可以在Visual Studio 10
感謝您的回答。你是對的,但.....如果我使用'navProperty.ToEndMember.Name',我也得到'訂單':) – Lorenzo
這是什麼給你的:navProperty.ToEndMember.TypeUsage.EdmType.Name – bwbrowning
它返回以下字符串「reference [CitiesModel.Order]」,其中包含正確的實體名稱,但裝飾有更多文本.... – Lorenzo