请为我澄清两件事:
据我所知,NULL不应该在外键中使用,但在我的某些应用程序中,我能够NULL在Oracle和SQL Server中输入,我不知道为什么.
我试图使用默认SQL值的Code-First EF6.
例如,我有一个"CreatedDate"列/属性不为null,SQL的默认值为"getdate()"
我如何在我的代码模型中表示这一点?目前我有:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)>
Public Property CreatedDate As DateTime
Run Code Online (Sandbox Code Playgroud)
这是否有效,或者我是否需要使用可空的内容,即使实际列不应为null,因此EF在未设置时不发送值:
<DatabaseGenerated(DatabaseGeneratedOption.Computed)>
Public Property CreatedDate As DateTime?
Run Code Online (Sandbox Code Playgroud)
或者那里有更好的解决方案吗?
我不希望EF处理我的默认设置 - 我知道这对我来说是可用的,但在我目前的情况下是不可能的.
我有一个旧的 Oracle 数据库,它有一个我想要理解的奇怪的怪癖。它有一个复合外键,其中一些列可以为空。对我来说,这听起来像是一个粗心的开发人员的糟糕设计,但我想征求意见。当然,原来的开发团队早已不复存在。
该表在列方面要大得多,但我认为我能够在下面的示例中提炼问题:
create table quadrant (
region number(9) not null,
area number(9) not null,
caption varchar2(20),
primary key (region, area)
);
insert into quadrant (region, area, caption) values (10, 123, 'Chicago');
insert into quadrant (region, area, caption) values (10, 125, 'Wisconsin');
create table farm (
id number(9),
region_id number(9) not null,
area_id number(9),
name varchar2(50),
constraint fk_region_area foreign key (region_id, area_id)
references quadrant (region, area)
);
insert into farm (id, region_id, area_id, name) values (5, 10, …Run Code Online (Sandbox Code Playgroud) 使用Firebird 2.1.
在重构大型系统时,我想在已经填充的表之间创建外键:
ALTER TABLE CMS_ARTRANS
ADD CONSTRAINT FK_ARTRANS_PRACTITIONER_ID
FOREIGN KEY (PRACTITIONER_ID)
REFERENCES CMS_SOLICITORS (RECID);
Run Code Online (Sandbox Code Playgroud)
这失败并显示以下消息:
违反FOREIGN KEY约束"".在表"CMS_SOLICITORS"上违反FOREIGN KEY约束"PK_CMS_SOLICITORS".外键引用目标不存在.
我有点期待参考完整性存在问题,这就是我首先想要FK的原因.所以我去寻找不匹配的记录:
SELECT
*
FROM CMS_ARTRANS AR
LEFT OUTER JOIN CMS_SOLICITORS S
ON (S.RECID = AR.PRACTITIONER_ID)
WHERE (AR.PRACTITIONER_ID IS NOT NULL) AND (S.RECID IS NULL)
Run Code Online (Sandbox Code Playgroud)
而且没有.CMS_ARTRANS.PRACTITIONER_ID中有大量NULL.但是没有与CMS_SOLICITOR记录不匹配的非NULL.
为什么Firebird不喜欢我的FK?
我的模特是这样的
public class Appointment
{
public int AppointmentID { get; set; }
public string AppointmentCode { get; set; }
public string ApplicationUserId { get; set; }
[ForeignKey("ApplicationUserId ")]
public ApplicationUser ApplicationUser { get; set; }
public int PriceId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我期待ApplicationUserId可以为空的外键,但它不是像桌面上那样创建的
CONSTRAINT [FK_dbo.Appointment_dbo.IdentityUser_ApplicationUserId] FOREIGN KEY ([ApplicationUserId]) REFERENCES [dbo].[IdentityUser] ([Id]),
Run Code Online (Sandbox Code Playgroud)
有人能指出正确的方法来实现这一目标吗?
注意:我使用Entity框架代码的第一种方法