1

データベースにあるバージョンとテンプレートの組み合わせを選択するだけです。

db 構造は次のとおりです。

CREATE Table ProductVersion(
id int not null primary key Identity,
Product_ID int not null,
Version decimal(18,1) not null,
Active bit not null,
LicenseVersion int not null,
FOREIGN KEY (Product_ID) References Products(id)
)

Create Table CodeTemplates(
id int not null primary key Identity,
Name varchar(50) not null,
DLT_ID int not null,
QuantityRule_ID int,
SerialRule_ID int,
DurationRule_ID int,
foreign key (DLT_ID) References DisplayedLicenseTypes(id),
foreign key (QuantityRule_ID) References Rulesets(id),
foreign key (SerialRule_ID) References Rulesets(id),
foreign key (DurationRule_ID) References Rulesets(id)
)

CREATE table ProductVersion_CodeTemplate(
ProductVersion_ID int not null,
CodeTemplate_ID int not null,
CONSTRAINT PK_Restrictions Primary Key Clustered
(
    ProductVersion_ID asc,
    CodeTemplate_ID asc
),
foreign key (ProductVersion_ID) References ProductVersion(id),
foreign key (CodeTemplate_ID) References CodeTemplates(id)
)

productversion と CodeTemplates で現在使用されているモデルは次のとおりです。

[Table("ProductVersion")]
public class ProductVersionModel
{
    public int ID { get; set; }
    public virtual ProductModel Product { get; set; }
    [DisplayFormat(DataFormatString = "{0:F1}",ApplyFormatInEditMode=true)]
    public decimal Version { get; set; }
    public bool Active { get; set; }
    public int LicenseVersion { get; set; }
}
[Table("CodeTemplates")]
public class TemplateModel
{
    public int ID { get; set; }

    public string Name { get; set; }
    public virtual DisplayedLicenseTypeModel DLT { get; set; }
    public virtual List<LicenseFlagModel> LicenseFlags { get; set; }
    public virtual RulesetModel QuantityRule { get; set; }
    public virtual RulesetModel SerialRule { get; set; }
    public virtual RulesetModel DurationRule { get; set; }
}

これが私が使用しようとしたものです:

[Table("ProductVersion_CodeTemplate")]
public class ProductVersionWithTemplateModel
{
    [Key, Column(Order = 0)]
    public virtual ProductVersionModel ProductVersion { get; set; }
    [Key, Column(Order = 1)]
    public virtual TemplateModel CodeTemplate { get; set; }
}

ポップアップする最初のエラーは次のとおりです。

モデルの生成中に 1 つ以上の検証エラーが検出されました:

System.Data.Edm.EdmEntityType: : EntityType 'ProductVersionWithTemplateModel' にはキーが定義されていません。この EntityType のキーを定義します。System.Data.Edm.EdmEntitySet: EntityType: EntitySet "AppliedTemplates" は、キーが定義されていない "ProductVersionWithTemplateModel" 型に基づいています。

ここで何が欠けていますか、dbmodelbuilder バインディングですか?

回答(コメントの書式設定がひどいため):

[Table("ProductVersion_CodeTemplate")]
    public class ProductVersionWithTemplateModel
    {
        [Key, Column(Order = 0)]
        public int ProductVersion_ID { get; set; }
        [ForeignKey("ProductVersion_ID")]
        public virtual ProductVersionModel ProductVersion { get; set; }
        [Key, Column(Order = 1)]
        public int CodeTemplate_ID { get; set; }
        [ForeignKey("CodeTemplate_ID")]
        public virtual TemplateModel CodeTemplate { get; set; }
    }
4

1 に答える 1

0

おそらく、次のような参照を含める必要があります。

[Table("ProductVersion_CodeTemplate")]
public class ProductVersionWithTemplateModel
{
 [Key, Column(Order = 0)]
 public int ProductVersionModelId { get; set; }
 [ForeignKey("ProductVersionModelId")]
 public virtual ProductVersionModel ProductVersion { get; set; }
 [Key, Column(Order = 1)]
 public int TemplateModelId { get; set; }
 [ForeignKey("TemplateModelId")]
 public virtual TemplateModel CodeTemplate { get; set; }
}
于 2012-09-04T19:56:27.783 に答える