我不确定如何准确地说出我的问题,这可能就是为什么我无法在任何地方找到这样的例子。我正在玩MVC4& EF5(也是Web API),但我不知道如何继续使用模型,因为我以前从未真正对它们做过多少工作。我正在围绕元素的周期性平板电脑做一些事情,我想做到这一点,以便我有一个列表为一个元素构建它的电子配置。但是,我想根据输入顺序只提供自动编号。如何告诉EF自动增加字段?基本上就像一个没有这种限制的主键领域。这是我到目前为止所做的 - 我只是不确定如何继续:
public class Elements
{
public int ElementID { get; set; }
public string Name { get; set; }
public int AtomicNumber { get; set; }
public string Symbol { get; set; }
public virtual Categories Category { get; set; }
public virtual States State { get; set; }
public virtual Occurences Occurence { get; set; }
public virtual ICollection<Configurations> Configuration { get; set; }
}
public class Categories
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
public class States
{
public int StateID { get; set; }
public string StateName { get; set; }
}
public class Occurences
{
public int OccurenceID { get; set; }
public string OccurenceName { get; set; }
}
public class Configurations
{
public int ConfigurationID { get; set; }
public int Order { get; set; }
public int Value { get; set; }
}
上面我想要的是随时向Configurations.Order添加一个值,该值从1开始,随着每个新的'row'而增加,但仅针对该特定的ElementID。
这有意义吗?我正在寻找使用数据注释但我找不到除了关键字段以外的任何匹配但是这使得每个订单都是唯一的数字 - 我不想要。我觉得我没有正确地表达这一点,因为我一直在寻找所有的东西,所以这是一张照片!耶!
从程序化的角度来看,这可能会更好。即使这个数据在蓝色的月亮中发生了一次变化,我想尝试通过EF进行,如果可能的话,我知道如何。
提前感谢。此外,如果你看到任何其他明显的错误,请务必告诉我:)我很少与网络开发的这一方合作,所以我确信有办法更好地做事。
答案 0 :(得分:0)
如何告诉EF自动增加字段?
你做不到。甚至不是简单的自动递增主键。更不用说一个应该相对于其他值增加的字段了。
HasDatabaseGeneratedOption
映射方法不是告诉EF如何生成键值的方法。它告诉EF数据库是否以及如何为属性生成值,因此EF知道如何响应该属性。
所以你要么必须在代码中生成订单号,要么让数据库执行它(通过触发器,或通过将Configurations
上的CUD操作映射到存储过程)并告诉EF数据库计算值在HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed)
属性的配置中Order
。