2012-12-27 5 views
10

Tôi đang sử dụng trình tạo mẫu POCO t4 đi kèm với VS 2012. Tôi đã thực hiện một vài thay đổi để bao gồm Entity.Name, nhưng tôi không thể tìm ra khóa chính.Tìm một thuộc tính là Primary Key trong POCO Template máy phát điện t4

public string EntityClassOpening(EntityType entity) 
{ 
    return string.Format(
     CultureInfo.InvariantCulture, 
     "{0} {1}partial class {2}{3}<{4},{5}>{6}", 
     Accessibility.ForType(entity), 
     _code.SpaceAfter(_code.AbstractOption(entity)), 
     _code.Escape(entity), 
     ": EntityBase", 
     entity.Name, 
     entity.Name, 
     _code.StringBefore(" ", _typeMapper.GetTypeName(entity.BaseType))); 
} 

Tôi không tìm cách tìm khóa chính từ phân cấp đối tượng EntityType. Nó cho thấy các thuộc tính nhưng thuộc tính không có gì để nói nó là khóa chính.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

13

Chỉ trong trường hợp bất kỳ ai đang cố gắng thực hiện điều này trong khi di chuyển công cụ dịch vụ RIA, tôi đang sử dụng mẫu tiêu chuẩn dbcontext trong VS2013 và đã thêm hai thứ vào mẫu thực thể.

đầu tiên bạn cần:

using System.ComponentModel.DataAnnotations; 

Tôi đặt nó ngay dưới // ---- khối gần đầu trang.

Sau đó, tôi đã sửa đổi bit mã trông như thế này. Chỉ cần tìm kiếm tên đầu tiên. Thay đổi của tôi là ef.IsKey ... và thêm thuộc tính Key().

var simpleProperties = typeMapper.GetSimpleProperties(entity); 
    if (simpleProperties.Any()) 
    { 
     foreach (var edmProperty in simpleProperties) 
     { 
#> 
<#if (ef.IsKey(edmProperty)) 
    {#>  [Key()] 
    <#}#> 
    <#=codeStringGenerator.Property(edmProperty)#> 
<# 
     } 
    } 
+0

Tôi đang tìm kiếm rằng trên một bảng không có khóa được xác định, mẫu sẽ trả về true cho IsKey trên nhiều cột (không phải tất cả). Tôi cần phải nhìn vào những gì đang xảy ra ở đó, nhưng có ai có cái nhìn sâu sắc nào không? –

9

Sử dụng thuộc tính EntityType.KeyMembers để nhận các thuộc tính mà khóa chính bao gồm.

+1

Điều này đã giúp ích. Tôi đã sử dụng EntityType.KeyProperties để sử dụng. Cảm ơn! – TravisWhidden

+0

@TravisWhidden bạn có thể vui lòng chia sẻ mã bạn đã sử dụng EntityType.KeyProperties không? Cảm ơn! –