ASP.Net MVC错误为2个链接表创建模型

Mar*_*ark 4 c# linq asp.net-mvc entity-framework

我正在使用现有的数据库,希望更新到asp.net MVC 4.我很难为两个表创建模型.Rule和RuleApply表.

我希望使用类似的东西来查询它:

var rules = db.Rules.Include("RulesApply").Where(t => t.rule_active == 1).ToList();
Run Code Online (Sandbox Code Playgroud)

RuleApply表没有主键(它只是用作查找表) - 所以当我尝试编译时,我收到错误:

EntityType"RuleApply"没有定义键.定义此EntityType的键.

有什么办法可以将Rule.id与RuleApply.rule_id链接起来吗?或者现有的表,必须添加一个主键,以允许我使用EF/Linq等?

namespace emc.Models
{
public class Rule
{
    [Key]
    public int id { get; set; }
    public int type_id { get; set; }
    public int rule_active { get; set; }
    public DateTime rule_start { get; set; }
    public DateTime rule_end { get; set; }
    public virtual ICollection<RuleApply> RulesApply { get; set; }
}

public class RuleApply
{
    public int type_id { get; set; }
    public int rule_id { get; set; }
    public virtual Rule Rule { get; set; }

}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议,

标记

Ser*_*kiy 5

只需将key属性添加到RuleApplytype(Id按约定将被视为Key,您不需要使用此类名称标记属性KeyAttribute).还使用ForeignKey属性链接rule_id属性Rule:

public class RuleApply
{
    public int Id; // entity should have primary key
    public int type_id { get; set; }
    public int rule_id { get; set; }
    [ForeignKey("rule_id")]
    public virtual Rule Rule { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

或者从现有属性制作组合键:

public class RuleApply
{
    [Key, Column(Order=0)]
    public int type_id { get; set; }
    [Key, Column(Order=1)]
    public int rule_id { get; set; }
    [ForeignKey("rule_id")]
    public virtual Rule Rule { get; set; }    
}
Run Code Online (Sandbox Code Playgroud)

在C#中BTW我们使用PascalCase命名属性.