Tag: foreign keys

指定的架构无效。 错误:未加载关系,因为类型不可用

我想在Order模型中引用OrderAddress模型两次 ; 一次作为ShippingAddress ,一次作为BillingAdress 。 另一方面,我希望我的OrderAddress模型有一个OrderAddresses列表。 OrderAddress模型 public enum AddressType { Billing, Shipping, Contact } public class OrderAddress : BaseModel { public AddressType AddressType { get; set; } public bool IsPrimary { get; set; } public string Address { get; set; } public string CityStateZip { get; set; } public string ContactName { get; set; […]

如何确定PropertyType是否为外键

我有以下类’schakeling’,用EF生成,表示数据库表’schakeling’。 在数据库中,’id’是主键,’plc_id’是外键。 public partial class schakeling { public schakeling() { this.verbruik = new HashSet(); } public int id { get; set; } public int plc_id { get; set; } public string var_output { get; set; } public string omschrijving { get; set; } public int vermogen { get; set; } public Nullable status { get; […]

在ASP.NET MVC 4 C#Code First中指定ON DELETE NO ACTION

如何在模型设计中指定ON DELETE NO ACTION外键约束? 目前,我有: public class Status { [Required] public int StatusId { get; set; } [Required] [DisplayName(“Status”)] public string Name { get; set; } } public class Restuarant { public int RestaurantId { get; set; } [Required] public string Name { get; set; } [Required] [EmailAddress] public string Email { get; set; } […]

EF4.1代码优先:如何在依赖实体中禁用没有导航属性的关系的删除级联

假设我有这两个非常基本的实体: public class ParentEntity { public int Id; public virtual ICollection Childrens; } public class ChildEntity { public int Id; public int ParentEntityId; // Foreign Key public virtual ParentEntity parent; // [NOTWANTED] } 出于某些原因,我不希望ChildEntity将引用保留回其父级。 我只是希望它保留ParentEntity id,但仅此而已。 到目前为止,没问题,我只是删除[NOTWANTED]行,一切都按预期工作。 我的问题是:如何在特定情况下禁用级联删除? 如果我仍然拥有父导航属性,那将很容易: modelBuilder.Entity() .HasRequired(c => c.parent) .WithMany(p => p.Childrens) .WillCascadeOndelete(false) 但是如果没有导航属性,我根本不知道如何在删除时禁用级联(当然不是全局禁用它,也不是每个表禁用它,而只是为了关系)。 我现在所做的是将外键设置为可以为空的int,以便在删除时禁用级联,但这并不漂亮: public int? ParentEntityId; // Foreign Key […]

不同DbContext和不同模式之间的entity framework关系

所以,我有两个主要对象,会员和公会。 一个会员可以拥有一个公会,一个公会可以拥有多个会员。 我在一个单独的DbContext和单独的类库中有Members类。 我打算在多个项目中重用这个类库并帮助区分,我将数据库模式设置为“acc”。 我已经广泛测试了这个库,可以在acc.Members表中添加,删除和更新成员。 行会类是这样的: public class Guild { public Guild() { Members = new List(); } public int ID { get; set; } public int MemberID { get; set; } public virtual Member LeaderMemberInfo { get; set; } public string Name { get; set; } public virtual List Members { get; set; } […]

删除级联的entity framework

我在删除Entity Framework 4.1中的相关行时遇到问题。 我有关系表 书1 * BookFormats 我已经设置了删除级联: ALTER TABLE [dbo].[BookFormats] WITH CHECK ADD CONSTRAINT [FK_BookFormats_Book] FOREIGN KEY([BookID]) REFERENCES [dbo].[Book] ([BookID]) on delete cascade EDMX属性 然后,我想删除与我的Book对象相关的所有BokFormats项: var originalBook = m.db.Book.First(x => x.BookID == bookId); originalBook.BookFormats.Clear(); m.db.SaveChanges(); 但是,我得到错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 当对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。 我没有关于如何删除这些对象的想法。 有任何想法吗?

在什么情况下我需要entity framework中的外键和导航属性

我的Order课程有: public int CustomerId { get; set; } public Customer Customer { get; set; } 我真的需要这两个属性来建立关系吗? 我没有使用断开连接的实体,我使用代码第一种方法。

使用主表中的重命名字段和非主键创建实体关系

以下是我试图定义外键关系的两个部分表。 public class Form { [Key, Column(“FormID”)] public System.Guid FormGUID { get; set; } [Column(“PatGUID”)] public Nullable PatientGUID { get; set; } } public class Patient { [Column(“PatGUID”)] public System.Guid PatientGUID { get; set; } [Key, Column(“PatID”)] public int PatientID { get; set; } } 除了相关的信息,字段,导航等,我已经删除了所有这个例子; 希望不要太多。 我们有一个表格Form,带有PatGUID的FK到患者表格,其中包含字段PatGUID 。 Patient表具有PatID int KEY字段。 我们要求为代码第一实体模型重命名字段; 此示例中需要更改的相关字段是PatGUID更改为PatientGUID 。 […]

建模多态关联数据库优先与代码优先

我们有一个数据库,其中一个表包含可以是其他几个表的子记录。 它有一个“软”外键,由所有者的Id和表名组成。 这种(反)模式被称为“多态关联”。 我们知道它不是有史以来最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来改变它。 让我举一个简化的例子: Event , Person和Product都有评论记录。 如您所见,没有严格的FK约束。 在Entity Framework中,可以通过将Comment化为EventComment等来支持这个模型,并让Event有一个EventComments集合等: 从数据库生成基本模型后,手动添加子类和关联。 OwnerCode是此TPH模型中的鉴别器。 请注意, Event , Person和Product是完全不同的实体。 为它们建立一个公共基类是没有意义的。 这是数据库优先的。 我们的现实模型就像这样,没问题。 好。 现在我们想要转向代码优先。 所以我开始将数据库逆向工程化为代码优先模型(EF Power Tools),然后继续创建子类并映射关联和inheritance。 试图连接到Linqpad中的模型。 那是麻烦开始的时候。 尝试使用此模型执行查询时,它会抛出InvalidOperationExeception 外键组件“OwnerId”不是“EventComment”类型的声明属性。 validation它是否未从模型中明确排除,并且它是有效的原始属性。 当我有双向关联并且OwnerId被映射为Comment的属性时会发生这种情况。 我的EventMap类( EntityTypeConfiguration )中的映射如下所示: this.HasMany(x => x.Comments).WithRequired(c => c.Event) .HasForeignKey(c => c.OwnerId); 所以我尝试在模型中没有OwnerId映射关联: this.HasMany(x => x.Comments).WithRequired().Map(m => m.MapKey(“OwnerId”)); 这会抛出MetaDataException 指定的架构无效。 错误:(10,6):错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“OwnerId”。 (11,6):错误0019:类型中的每个属性名称必须是唯一的。 已定义属性名称“OwnerId”。 如果我删除三个实体注释关联中的两个,那就没关系,但当然这不是治愈方法。 […]

首先了解entity framework代码中的ForeignKey属性

有关背景信息,请参阅以下post: entity framework一到零或一个没有导航属性的关系 我一直认为ForeignKey用于显示类中哪个属性持有确定导航属性的ForeignKey,例如 public class MemberDataSet { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int? DeferredDataId { get; set; } [ForeignKey(“DeferredDataId”)] public virtual DeferredData DeferredData { get; set; } } 但是,我在链接的post上发现这是不对的,因为DeferredData的主键被称为Id我实际需要: public class MemberDataSet { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int? DeferredDataId { get; set; } […]