我正在尝试使用带有Entity Framework的代码优先模型在数据库中存储矩阵。我为矩阵中的每个元素创建了一个对象。我希望能够搜索行和列,因此我希望将RowID
和ColID
都设为Key
。使用复合键我仍然收到错误:
“Trojan.Models.Matrix_Element :: EntityType'MaxI_Element'没有定义键。定义此EntityType的键。
default_Matrix:EntityType:EntitySet'default_Matrix'基于类型'Matrix_Element',没有定义键。“
我猜这是因为RowID
和ColID
有重复的值。它是一个矩阵,所以每对(RowID, ColID)
都是唯一的,但我猜测因为每行有多个条目,每列有多个条目,所以它认为存在具有相同PK的元素。
有没有办法通过这对钥匙识别元素?或者我是否被迫创建ElementID
属性并将其用作PK?
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Trojan.Models
{
public class Matrix_Element
{
[Key, Column(Order = 0)]
public int RowID;
[Key, Column(Order = 1)]
public int ColID;
public int? cellValue;
public string R;
}
}
答案 0 :(得分:0)
您需要使用属性而不是字段。把你的班级变成这个....
public class Matrix_Element
{
[Key, Column(Order = 0)]
public int RowID { get; set; }
[Key, Column(Order = 1)]
public int ColID { get; set; }
public int? cellValue { get; set; }
public string R { get; set; }
}
....你会得到这样的迁移:
public override void Up()
{
CreateTable(
"dbo.Matrix_Element",
c => new
{
RowID = c.Int(nullable: false),
ColID = c.Int(nullable: false),
cellValue = c.Int(),
R = c.String(),
})
.PrimaryKey(t => new { t.RowID, t.ColID });//Success!
}