2

MVCスキャフォールディングをコンポジット/コンプレックスキーで動作させる方法を理解しようとしています。

私は次の表を持っています:

public class Data
{
    [Key, Column(Order = 0)]
    [ForeignKey("Note")]
    [Display(Name = "Note id")]
    public int NoteId { get; set; }

    [Key, Column(Order = 1)]
    [ForeignKey("Member")]
    [Display(Name = "Member id")]
    public int MemberId { get; set; }

    [Display(Name = "Description")]
    public string Description { get; set; }

    [Display(Name = "Note")]
    public virtual Note Note { get; set; }

    [Display(Name = "Member")]
    public virtual Member Member { get; set; }
}

足場のラインを実行すると:

Scaffold Controller Data -Repository

次のエラーが表示されます。

Get-PrimaryKey : Cannot find primary key property for type
Pro.Web.Models.Data'. Multiple properties appear to be 
                        primary keys: NoteId, MemberId

この問題の解決策は何でしょうか?VisualStudio2012を使用しています。

ありがとう。

4

1 に答える 1

5

名前空間のPrimaryKeyLocation下のクラスには、PrimaryKeyLocation.csファイル自体に実装されているインターフェイスのリストがあります。T4Scaffolding.Core.PrimaryKeyLocatorsIPrimaryKeyLocator

利用可能な5つの実装を読むと、コードがKeyAttributePropertyLocator[Key]属性でマークされた両方のメンバーを返す実装に該当するGetPrimaryKeyCmdlet.csことがわかりますが、T4エンジンから実行され、PrimaryKeyLocationクラスを呼び出す実装には次の実装があります。

switch (primaryKeyProperties.Count)
{
    case 0:
      // Code when no key is found
    case 1:
      // Code when one key is found
    default:
      // Code when more than one key is found
      WriteError(string.Format("Cannot find primary key property for type '{0}'. 
                 Multiple properties appear to be primary keys: {1}",
                   foundClass.FullName, primaryKeyPropertyNames));
}

したがって、switchステートメントは複数のキーを処理しないため、複合キーはサポートされていません。これを回避する1つの方法は、複合キーのケースを実装することですが、それがt4テンプレート自体に与える影響はわかりません。

足場ツールのソースコード。

于 2013-03-26T12:32:22.937 に答える