私はEntity Frameworkを使用して、学習目的で単純な銀行業務アプリケーションを作成しています。私はそれがどのプロパティがnullableになり、どのプロパティがデータベース内のnull可能でない列になるかを決める方法を理解していません。Entity Framework CoreはどのプロパティがデータベースでNULLにならないのかをどのように決定しますか?
例えばこの
モデル
public class Transaction
{
public int Id { get; set; }
public Account From { get; set; }
public Account To { get; set; }
[DataType(DataType.Currency)]
public decimal Amount { get; set; }
public String Currency { get; set; }
public DateTime Timestamp { get; set; }
}
は、以下
SQL
CREATE TABLE [dbo].[Transactions] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Amount] DECIMAL (18, 2) NOT NULL,
[Currency] NVARCHAR (MAX) NULL,
[FromId] INT NULL,
[Timestamp] DATETIME2 (7) NOT NULL,
[ToId] INT NULL,
CONSTRAINT [PK_Transactions] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Transactions_Accounts_FromId] FOREIGN KEY ([FromId]) REFERENCES [dbo].[Accounts] ([Id]),
CONSTRAINT [FK_Transactions_Accounts_ToId] FOREIGN KEY ([ToId]) REFERENCES [dbo].[Accounts] ([Id])
);
GO
CREATE NONCLUSTERED INDEX [IX_Transactions_FromId]
ON [dbo].[Transactions]([FromId] ASC);
GO
CREATE NONCLUSTERED INDEX [IX_Transactions_ToId]
ON [dbo].[Transactions]([ToId] ASC);
質問を生成します
なぜCurrency
はnull可能ですが、Amount
ではありませんか?外部キーはどうですか?FromId
とToId
?
付録
それが関連している場合は、ここでTransaction
クラスによって参照Account
クラスです。
public class Account
{
public int Id { get; set; }
public int UserId { get; set; }
public User User { get; set; }
[InverseProperty("From")]
public ICollection<Transaction> TransactionsSend { get; set; }
[InverseProperty("To")]
public ICollection<Transaction> TransactionsReceived { get; set; }
public decimal Balance { get; set; }
}
「DateTime」タイプのタイムスタンプはどうですか?参照型でもないのでしょうか?それにもかかわらずヌル可能です。 – problemofficer
私は答えを見つけたと思います。https://stackoverflow.com/a/109872/502727 – problemofficer