0
我们正在研究EF代码以评估它是否适合我们现有的数据库。数据库的entites的结构是与EF 4.1的一对多关系代码优先 - 使用数据库代替触发器
1)产品(复合键)
INT产品编号:PK(非身份) - 在INSTEAD OF触发器 INT版本从自动生成:PK(非标识) - 自动生成的INSTEAD OF触发器
2)包(复合键)
PackID:PK(非身份) - 在INSTEAD OF触发器 版本从自动生成:PK(非身份) - 在INSTEAD OF触发器 产品ID自动生成的: (不能设置为FK - 设计缺陷traint)
关系:产品有许多包
我们怎样才能出现上述情况与EF代码第一次模拟4.1?
该模型生成过程中试图
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public short Version { get; set; }
public virtual ICollection<Pack> Packs { get; set; }
}
public class Pack
{
public int PackID { get; set; }
public int ProductID { get; set; }
public short Version { get; set; }
public virtual Product Product { get; set; }
}
public class ProductContext : DbContext
{
public DbSet<Pack> Pack { get; set; }
public DbSet<Product> Product { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().ToTable("Product");
modelBuilder.Entity<Pack>().ToTable("Pack");
modelBuilder.Entity<Product>()
.HasKey(a => new { a.ProductID, a.VersionFrom });
modelBuilder.Entity<Pack>()
.HasKey(a => new { a.PackID, a.VersionFrom });
modelBuilder.Entity<Product>().HasMany<Pack>(x => x.Packs).WithRequired().HasForeignKey(p => p.ProductID);
base.OnModelCreating(modelBuilder);
}
}
....
var product = new Product { ProductName = "EntTest1"};
var pack = new Pack {};
using (var productContext = new ProductContext())
{
product.Packs.Add(pack);
productContext.Product.Add(product);
productContext.SaveChanges(); //**ERROR**
}
....检测
一个或多个验证错误的解决方案:
System.Data.Edm.EdmAssociationConstraint: : Number of Properties in the Dependent and Principal Role in a relationship constraint must be exactly identical.
请帮助!
有没有可能在不提供标量属性的情况下创建关系。 – Maran
@Maran编辑答案 – Eranga