Я хочу создать таблицу, в которой уникальность данных основана на нескольких столбцах (2 или 3), но один из них может быть нулевым. Например:
FRUIT WEIGHT UNIT
Apple
Apple 1 Kg
Apple 2 Kg
Orange
Orange 1 Kg
Orange 2 Kg
все будут считаться уникальными записями. Можно ли это сделать с помощью аннотаций данных EF 6.1? Я считаю, что достиг этого следующим образом:
[Required]
[Index("UniqueIndx", 1)]
public string Name { get; set; }
[Index("UniqueIndx", 2)]
public float? Weight { get; set; }
[Index("UniqueIndx", 3, IsUnique = true)]
public FormulUnit? Unit { get; set; }
который производит:
public override void Up()
{
AlterColumn("MyDb.Fruits", "Weight", c => c.Single());
AlterColumn("MyDb.Fruits", "Unit", c => c.Int());
CreateIndex("MyDb.Fruits", new[] { "Name", "Weight", "Unit" },
unique: true, name: "UniqueIndx");
}
Насколько я понимаю, метод Up, созданный миграцией, заключается в том, что уникальность основана на всех трех столбцах, а не только на последнем, к которому я написал эту аннотацию. Это нормально для меня, это на самом деле то, что я хочу.
У меня все еще есть проблема с заполнением этой таблицы. Я получаю ошибки в методе AddOrUpdate, например:
System.InvalidOperationException: The binary operator Equal is not defined for the types 'System.Nullable`1[System.Single]' and 'System.Single'.
для:
context.Fruits.AddOrUpdate(
p => new {p.Name, p.Weight, p.Unit}, fr1, fr2, fr3
);
Я что-то пропустил? Спасибо
FormulUnit
? - person Yuliam Chandra   schedule 09.08.2014Fruit
? - person Yuliam Chandra   schedule 09.08.2014