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)
谢谢你的建议,
标记
只需将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命名属性.
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |